0

我正在尝试为 Android 制作一个简单的 Web 服务器应用程序,它从 URL 中获取查询字符串,通过 USB 串行电缆传输到串行设备,并将接收到的响应作为文本/纯文本返回。Web 服务器被实现为一个扩展 Thread 的类,并且它和 USB 串行代码工作了一段时间。(我认为 TCP/IP 网络操作需要一个单独的线程。)

我希望服务器在连接 USB 串行电缆时启动,并在拔下电缆时停止。通过这样做,我可以利用“每次连接设备时启动这个应用程序”,所以我不必每次都向用户询问 USB 权限。没有 UI,所以最初我以为我可以制作一个仅服务的应用程序,但我发现 Android 假定它正在启动一个带有 Main Activity 的应用程序。连接电缆后,我确实可以正常启动。我想我最终可以用半透明屏幕制作一个空的主要活动,并在启动服务后调用完成。而且我有一个广播接收器,它似乎可以捕获 USB 断开连接事件。

我正在苦苦挣扎的是,Android 经常说不幸的是您的应用程序已停止工作并想要关闭它(终止进程)。它似乎确实挂断了 UI,不知道如何,因为我已经调用了完成。即使在“您的应用程序已停止工作”消息出现时,Web 服务器线程仍然可以正常工作,并且它会继续正常工作,直到我回答是,这会终止进程。

在服务中我有什么特别的事情要做,因为我希望在空的主要活动完成后保持服务运行?我在正确的轨道上吗?服务是否需要在自己的进程中运行?

提前感谢您能给我的任何见解。

4

1 回答 1

0

该服务不需要在它自己的进程中,但它确实需要在它自己的线程上运行。

确保您的 Web 服务器扩展了“服务”类并产生一个线程来完成这项工作。在 onStartCommand 做类似的事情

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Thread t = new Thread() {
         public void run() {
            // do web server stuff
         }
    };
    t.start();
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

然后确保在您的广播接收器或活动类中没有完成长时间运行的工作。

于 2013-07-30T00:23:59.407 回答