在线程运行时在Service中调用stopSelf()

时间:2010-09-14 15:03:24

标签: android multithreading service

假设我的服务的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();
 }

2 个答案:

答案 0 :(得分:21)

  

在线程完成之前调用stopSelf()。究竟发生了什么?

线程运行完成。

  

Android是否听到了stopSelf()调用,但推迟了它直到线程完成?

没有。您的Service仍在stopSelf()来电时被销毁。你只是泄漏一个线程和Service对象,至少在线程终止之前。

您可能希望切换到IntentService,因为它集成了background-thread-and-stopSelf()模式。

答案 1 :(得分:1)

如果从线程内部调用stopself()。只要您希望服务停止,就可以在线程中的任何位置调用stopSelf()。但即使这样,线程仍将继续运行。如果你希望服务在线程完成后立即停止,那么在线程的最后一行调用stopSelf()。