如何在不停止主线程的情况下停止Android应用程序中所有正在运行的工作线程?
有这方面的例子吗?
其实线程有方法stop()
,因此您可以检查所有工作线程并在每个线程上调用此方法。
问题是“从哪里获取工作线程列表?”
更好的解决方案是将此列表存储在应用程序级别的某个位置,即每次创建工作线程时将其放入特殊列表中。这是更好的解决方案,因为您并且只有您知道该线程是“工作”线程。
但理论上,您甚至可以动态发现您的应用程序并检索线程。有静态方法Thread.enumerate(Thread[] threads)
填充提供的数组。但如何知道现在有多少线程在运行呢?使用Thread.activeCount()
.
Thread[] threads = new Thread[Thread.activeCount()];
Thread.enumerate(threads);
for (Thread t : threads) {
if (isWorkerThread(t)) {
t.stop();
}
}
由您来确定您的工作线程。例如,您可以为此使用线程的名称或线程的堆栈跟踪。
但调用已弃用的方法是犯罪行为stop()
。请参阅该方法的javadoc以了解原因。
“正确”的方法是在应用层实现优雅关闭机制。每个线程应该检查一些标志,该标志表明线程是否应该关闭,并且当标志为真时从run()
方法。在这种情况下,关闭工作线程非常简单:只需将此标志的值设置为 true,线程就会自行终止。这是“正确”的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)