服务和多线程呼叫

时间:2018-05-15 02:26:12

标签: android multithreading service

我创建了服务,这个服务有线程池,如果服务被破坏,那意味着线程也被破坏了,如果它们仍在工作,如何停止运行线程?

1 个答案:

答案 0 :(得分:1)

  

如果服务被破坏,那意味着该线程也被销毁

没有。即使在Service被销毁之后,线程仍将继续运行,直到操作系统在某个时刻终止应用程序的进程,这可能导致内存泄漏。

如果你创建线程,你必须清理它。

  

如果线程仍然有效,如何停止运行?

您不应该使用stop()来终止线程,因为以这种方式停止线程是不安全的,并且可能使您的应用程序和VM处于不可预测的状态。更清洁的清理方法是中断线程。您需要保持对Thread的引用。然后清理线程执行以下操作:

@Override
public void onDestroy() {
    super.onDestroy();
    thread.interrupt();
}

在你的Runnable in Thread的run()中,执行以下操作

@Override
public void run() {
    // stop your thread
    if (interrupted()) {
        return;
    }
    ...
}