假设我的服务的onStart()处理程序中有代码来启动线程来执行某些操作然后调用stopSelf()。
在线程完成之前调用stopSelf()。究竟发生了什么?
我自己测试了这个,我的线程继续执行直到它完成。 Android是否听到了stopSelf()调用,但推迟了它直到线程完成?
@Override
public void onStart(Intent intent, int startid) {
new Thread(new Runnable() {
public void run() {
// TODO some long running operation
}
}).start();
stopSelf();
}
答案 0 :(得分:21)
在线程完成之前调用stopSelf()。究竟发生了什么?
线程运行完成。
Android是否听到了stopSelf()调用,但推迟了它直到线程完成?
没有。您的Service
仍在stopSelf()
来电时被销毁。你只是泄漏一个线程和Service
对象,至少在线程终止之前。
您可能希望切换到IntentService
,因为它集成了background-thread-and-stopSelf()
模式。
答案 1 :(得分:1)
如果从线程内部调用stopself()。只要您希望服务停止,就可以在线程中的任何位置调用stopSelf()。但即使这样,线程仍将继续运行。如果你希望服务在线程完成后立即停止,那么在线程的最后一行调用stopSelf()。