2012-03-14 76 views
6

如何在不停止主线程的情况下停止android应用程序中的所有正在运行的工作线程?如何停止Android应用程序中的所有工作线程

这个的任何例子?

+0

你是什么意思停止主线程?你对工作线程有什么意义? – Blackbelt 2012-03-14 09:44:17

+0

你有没有试过搜索相关的东西? StackOverflow有一个不错的搜索工具。你的问题不容易理解,请解释。 – 2012-03-14 09:52:43

回答

1

在java中,不提供方法停止线程。

你只能interrupt线程,但在国家线程必须可中断,像sleepwait,等...

,也可以使用一些技巧,以使线程抛出异常 ,如:

1,如果线程是连接网络的,你想停止线程,可以关闭网络连接,会抛出ioexception;

2.如果线程读取这个文件,你可以关闭流抛出IOException;

3.如果线程查询数据库,就可以关闭数据库

所以它取决于你的线程工作。

1

其实线程方法stop(),这样你就可以去了所有的工作线程,并呼吁每一个这种方法。

的问题是“何处获取工作线程的名单?” 更好的解决方案是将此列表存储在应用程序级别的某处,即每次创建工作线程时都将其放入特殊列表中。这是更好的解决方案,因为你只知道线程是“worker”线程。

但理论上你甚至可以动态地发现你的应用程序和检索线程。有填充提供的数组的静态方法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,线程将自行终止。这是“正确的”解决方案。