我创建了服务,这个服务有线程池,如果服务被破坏,那意味着线程也被破坏了,如果它们仍在工作,如何停止运行线程?
答案 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;
}
...
}