Android关于服务的文档说:“另一个应用程序组件可以启动一个服务,即使用户切换到另一个应用程序,它也会继续在后台运行。”
让我们假设Android服务在onStartCommand中生成一个线程或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返回语句,因为它之前的两个语句是异步的。在这里生成的线程结束它们的执行之前,服务不应该终止吗?如果他们不是守护进程呢?
此外,在UI线程上执行服务(对IntentService略有混淆)时,我们需要在单独的线程中执行网络操作。因此,通常需要创建异步任务或不同的线程。有人能帮助我理解服务的执行吗?如果服务“继续在后台运行”的话?然后,从onStartCommand返回后,它会“运行”什么?
发布于 2014-01-29 18:28:35
因此,我怀疑在这里生成的线程结束其执行之前,服务不应该终止吗?
不是的。onStopCommand()返回并不表示服务正在被销毁。
如果一个服务“在后台继续运行”,那么在从onStartCommand返回之后,它会“运行”什么?
默认情况下没什么。它只是坐在那里,占用内存,对用户来说是一个普遍的麻烦。
如果您启动了一个服务,您需要有一个明确的计划,什么时候和如何停止该服务。服务可以通过调用stopSelf()本身或由其他调用stopService()的人停止。
https://stackoverflow.com/questions/21438946
复制相似问题