如果服务被系统杀死并随后重新启动,服务中先前启动的线程将如何停止?

问题描述 投票:0回答:1

如果

Service
实现了一个线程,它将使用类字段保存对它的引用,以便稍后可以通过调用适当的方法来停止线程(例如
quit()
quitSafely()
HandlerThread 
) 在
onDestroy()
实施中。我的问题是,如果系统决定终止
Service
并稍后重新启动它,导致类字段被重新实例化并且对原始线程的引用丢失怎么办?由于
onDestroy()
不能保证被调用,我们如何确保在创建新线程之前停止以前的线程?

正如其他相关 Stack Overflow 问题的答案所指出的,线程独立于应用程序组件的生命周期。因此,终止组件不一定会导致正在运行的线程的执行停止。当重复创建和终止组件时,这种情况可能会导致线程创建过多。处理这种情况的最佳做法是什么?

android multithreading android-service kill android-threading
1个回答
0
投票

没有调用

onDestroy()
的情况是当系统正在破坏你的整个进程时,所以在那个时候,你的整个进程的内存被转储,当它回来时,你将处于一个全新的进程中。不会对已经消失的先前过程进行任何清理。

© www.soinside.com 2019 - 2024. All rights reserved.