【发布时间】:2018-05-15 02:26:12
【问题描述】:
我创建了服务,这个服务有线程池,如果服务被销毁,是否意味着线程也被销毁了,如果线程还在工作,如何停止运行?
【问题讨论】:
标签: android multithreading service
我创建了服务,这个服务有线程池,如果服务被销毁,是否意味着线程也被销毁了,如果线程还在工作,如何停止运行?
【问题讨论】:
标签: android multithreading service
如果服务被破坏,那是否意味着线程也被破坏了
没有。即使Service 被销毁,线程仍将继续运行,直到操作系统在某个可能导致内存泄漏的点终止您的应用程序的进程。
如果你创建了线程,你必须清理它。
如果线程仍在工作,如何停止运行?
您不应使用stop() 来终止线程,因为以这种方式停止线程是不安全的,并且会使您的应用程序和虚拟机处于不可预测的状态。更干净的清理方法是中断线程。您需要保持对Thread 的引用。然后清理线程执行以下操作:
@Override
public void onDestroy() {
super.onDestroy();
thread.interrupt();
}
在你的 Runnable in Thread 的 run() 中,执行以下操作
@Override
public void run() {
// stop your thread
if (interrupted()) {
return;
}
...
}
【讨论】: