Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android usb串行到web服务器应用程序包装器停止工作_Android_Service - Fatal编程技术网

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

Android usb串行到web服务器应用程序包装器停止工作,android,service,Android,Service,我正在尝试为Android制作一个简单的web服务器应用程序,它从URL获取查询字符串,通过USB串行电缆传输到串行设备,并以文本/普通格式返回收到的响应。web服务器被实现为一个扩展线程的类,它和USB串行代码已经工作了一段时间。(我认为TCP/IP网络操作需要一个单独的线程。) 我希望服务器在连接USB串行电缆时启动,在拔下电缆时停止。通过这样做,我可以利用“每次连接设备时启动此应用程序”,因此我不必每次都向用户请求USB权限。没有UI,所以最初我认为我可以制作一个只提供服务的应用程序,但我

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

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

我一直在苦苦挣扎的是,安卓经常说,不幸的是,你的应用程序已经停止工作,想要关闭它(终止进程)。它确实似乎挂断了UI,不确定如何挂断,因为我调用了finish。web服务器线程即使在“您的应用程序已停止工作”消息出现时也会继续正常工作,并且它会继续正常工作,直到我回答“是”,这会终止进程

由于我的愿望是在空的主活动完成后保持服务运行,所以我在服务中需要做什么特殊的事情吗?我走对了吗?服务是否需要在自己的进程中运行


提前感谢您提供的任何见解。

该服务不需要位于自己的流程中,但需要在自己的线程上运行

确保您的web服务器扩展了“服务”类,并生成了一个线程来完成这项工作。在onstart命令中,执行以下操作

@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;
}
然后确保在广播接收器或活动类中没有完成长时间运行的工作