如果
Service
实现了一个线程,它将使用类字段保存对它的引用,以便稍后可以通过调用适当的方法来停止线程(例如 quit()
或 quitSafely()
在 HandlerThread
) 在 onDestroy()
实施中。我的问题是,如果系统决定终止 Service
并稍后重新启动它,导致类字段被重新实例化并且对原始线程的引用丢失怎么办?由于 onDestroy()
不能保证被调用,我们如何确保在创建新线程之前停止以前的线程?
正如其他相关 Stack Overflow 问题的答案所指出的,线程独立于应用程序组件的生命周期。因此,终止组件不一定会导致正在运行的线程的执行停止。当重复创建和终止组件时,这种情况可能会导致线程创建过多。处理这种情况的最佳做法是什么?
没有调用
onDestroy()
的情况是当系统正在破坏你的整个进程时,所以在那个时候,你的整个进程的内存被转储,当它回来时,你将处于一个全新的进程中。不会对已经消失的先前过程进行任何清理。