我正在尝试为Android开发一个简单的web服务器应用程序,它从URL获取查询字符串,通过USB串口电缆传输到串行设备,并以文本/纯文本的形式返回收到的响应。web服务器被实现为一个扩展了Thread的类,它和USB串行代码已经正常工作了一段时间。(我认为TCP/IP网络操作需要一个单独的线程。)
我希望服务器在连接USB串行电缆时启动,在拔出电缆时停止。通过这样做,我可以利用“每次设备连接时启动此应用程序”,这样我就不必每次都向用户请求USB许可。它没有用户界面,所以最初我以为我可以做一个只提供服务的应用程序,但我发现Android假设它正在启动一个有主活动的应用程序。当连接上电缆时,我确实让它启动正常。我想我最终可以创建一个带有半透明屏幕的空的主活动,并在启动服务后调用finish。我有一个广播接收器,它似乎可以捕捉到USB断开事件。
我正在纠结的是,Android经常说,不幸的是,你的应用程序已经停止工作,并想要关闭它(kiil the process)。它似乎确实挂起了UI,不确定是如何挂起的,因为我调用了finish。即使在“您的应用程序已停止工作”的消息出现时,web服务器线程仍然正常工作,并且它继续正常工作,直到我回答“是”,这会终止该进程。
由于我的愿望是在空的main活动完成后保持服务运行,所以在服务中有什么特殊的事情需要我做吗?我在正确的轨道上吗?服务是否需要在自己的进程中运行?
提前感谢你能给我的任何见解。
发布于 2013-07-30 08:23:59
服务不需要在它自己的进程中,但它确实需要在它自己的线程上运行。
确保您的web服务器扩展了"Service“类,并生成了一个线程来完成这项工作。在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;
}然后确保在您的广播接收器或activity类中没有长时间运行的工作。
https://stackoverflow.com/questions/17936203
复制相似问题