Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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
Java 从onStopCommand返回是否结束Android服务?_Java_Android_Multithreading_Android Asynctask - Fatal编程技术网

Java 从onStopCommand返回是否结束Android服务?

Java 从onStopCommand返回是否结束Android服务?,java,android,multithreading,android-asynctask,Java,Android,Multithreading,Android Asynctask,关于服务的Android文档说:“另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。” 假设Android服务在onStartCommand中生成一个线程或异步任务: @Override public int onStartCommand(Intent intent, int flags, int startId) { //asyncrhonous call-1 new SomeAsyncTask().execute(); //asynchronous call

关于服务的Android文档说:“另一个应用程序组件可以启动服务,即使用户切换到另一个应用程序,它也将继续在后台运行。”

假设Android服务在onStartCommand中生成一个线程或异步任务:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//asyncrhonous call-1
new SomeAsyncTask().execute();
//asynchronous call-2
new Thread(new Runnable(){//some runnable}).start();
//shouldn't service terminate here?
return Service.START_NOT_STICKY;
}
在上面的代码中,会立即遇到
onStartCommand
return语句,因为它前面的两条语句是异步的。服务不应该在这里生成的线程结束执行之前终止吗?如果它们不是守护进程呢

此外,由于服务(对IntentService有点混淆)在UI线程上执行,我们需要在单独的线程中执行网络操作。因此,可能经常需要创建异步任务或不同的线程。有谁能帮助我理解服务的执行以及服务是否“继续在后台运行”?那么,从onStartCommand返回后,它“运行”的是什么

所以我的疑问是,在这里生成的线程结束执行之前,服务不应该终止吗

否。
onStopCommand()
返回并不表示服务正在被销毁

如果服务“继续在后台运行”,那么从onStartCommand返回后,它“运行”的是什么

默认情况下,什么都没有。它只是坐在那里,占用内存,对用户来说是一个普遍的麻烦


如果你开始一项服务,你需要有一个明确的计划,该服务何时以及如何停止。服务通过自身调用
stopSelf()
或其他人调用
stopService()

停止。“服务通过自身调用stopSelf()或其他人调用stopService()停止。”以这种方式停止是否会终止运行它创建的非守护进程线程?@rahulserver:这取决于“它”是谁。由Android框架代码创建的线程由Android框架代码负责,因此当
IntentService
停止时,由
IntentService
创建的后台线程将停止。由您创建的线程是您的责任——Android的框架代码对此一无所知。“由IntentService创建的后台线程”您是指我们在IntentService生命周期方法中“显式”编码的线程还是由Android os隐式创建的线程(工作线程)?@rahulserver:“您是指我们在IntentService生命周期方法之一中“显式”编码的线程吗?”——这不是正确使用
IntentService
,或者是由android操作系统隐式创建的线程(工作线程)“--我指的是由谷歌雇佣的
IntentService
类作者创建的,该类是Android框架的一部分。从你作为一名应用程序开发人员的角度来看,你可以说它是“隐式创建的”,因为你可能不是编写
IntentService
本身的谷歌员工。实际上,我最初的问题涉及到一般的服务。不过,我感谢您指出:“这不是对IntentService的正确使用”。我已经对这个极好的答案投了赞成票。我是否可以得出结论,在非守护进程线程的情况下,我们需要杀死自己?