首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android usb串口到web服务器应用程序包装器停止工作

Android usb串口到web服务器应用程序包装器停止工作
EN

Stack Overflow用户
提问于 2013-07-30 07:58:50
回答 1查看 295关注 0票数 0

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

我希望服务器在连接USB串行电缆时启动,在拔出电缆时停止。通过这样做,我可以利用“每次设备连接时启动此应用程序”,这样我就不必每次都向用户请求USB许可。它没有用户界面,所以最初我以为我可以做一个只提供服务的应用程序,但我发现Android假设它正在启动一个有主活动的应用程序。当连接上电缆时,我确实让它启动正常。我想我最终可以创建一个带有半透明屏幕的空的主活动,并在启动服务后调用finish。我有一个广播接收器,它似乎可以捕捉到USB断开事件。

我正在纠结的是,Android经常说,不幸的是,你的应用程序已经停止工作,并想要关闭它(kiil the process)。它似乎确实挂起了UI,不确定是如何挂起的,因为我调用了finish。即使在“您的应用程序已停止工作”的消息出现时,web服务器线程仍然正常工作,并且它继续正常工作,直到我回答“是”,这会终止该进程。

由于我的愿望是在空的main活动完成后保持服务运行,所以在服务中有什么特殊的事情需要我做吗?我在正确的轨道上吗?服务是否需要在自己的进程中运行?

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

EN

回答 1

Stack Overflow用户

发布于 2013-07-30 08:23:59

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

确保您的web服务器扩展了"Service“类,并生成了一个线程来完成这项工作。在onStartCommand中做类似这样的事情

代码语言:javascript
复制
@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类中没有长时间运行的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17936203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档