2013-07-29 64 views
0

我想为Android做一个简单的Web服务器应用程序,它从URL中查询字符串,通过USB串行电缆传输到串行设备,并返回收到的回复为文本/纯文本。网络服务器是作为一个扩展线程的类来实现的,并且它的USB序列码在一段时间内工作正常。 (我认为TCP/IP网络操作需要单独的线程。)Android的USB串口到Web服务器的应用程序包装停止工作

我希望在连接USB串行电缆时启动服务器,并在拔下电缆时停止服务器。通过这样做,我可以使用“每次连接设备时启动此应用程序”,所以我没有每次都向用户询问USB许可。没有用户界面,所以最初我以为我可以制作一个仅限于服务的应用程序,但是我发现Android假定它正在启动一个包含主要活动的应用程序。当连接电缆时,我确实开始了。我想我最终可以用半透明的屏幕做一个空白的主要活动,并在开始服务后打电话完成。而且我有一台广播接收器似乎正在捕获USB断开连接的事件。

我在挣扎的是,Android经常说不幸的是你的应用程序已经停止工作并想关闭它(kiil进程)。它似乎挂断了用户界面,不知道如何,因为我称之为完成。 Web服务器线程继续做工精细即使在“您的应用程序已停止工作”的消息到了,并继续を做工精细,直到我回答是,杀死的过程。

有什么特别我在服务做的,因为我的愿望是保持业务正常运行空的主要活动结束后?我在正确的轨道上吗?服务是否需要在自己的过程中运行?

在此先感谢您提供给我的任何见解。

回答

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; 
} 

然后确保没有长时间运行的工作在你的广播接收机或活动课来完成。