Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止android应用程序中的所有工作线程_Java_Android - Fatal编程技术网

Java 如何停止android应用程序中的所有工作线程

Java 如何停止android应用程序中的所有工作线程,java,android,Java,Android,如何在不停止主线程的情况下停止android应用程序中所有正在运行的工作线程 有这样的例子吗?这篇文章谈了很多关于线程的内容,如果这不能回答您的问题,请阅读并重新发布 在java中,不要提供停止线程的方法。 您只能中断线程,但线程必须处于可中断的状态,如睡眠,等待,等等 或者您可以使用一些技巧使线程抛出异常,例如: 1.如果线程正在连接网络,您要停止线程,您可以关闭网络连接,将抛出ioexception 2.如果线程读取文件,可以关闭流抛出ioexception 3.如果线程正在查询数据库,则可

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


有这样的例子吗?

这篇文章谈了很多关于线程的内容,如果这不能回答您的问题,请阅读并重新发布


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

您只能
中断
线程,但线程必须处于可中断的状态,如
睡眠
等待
,等等

或者您可以使用一些技巧使线程抛出异常,例如:

1.如果线程正在连接网络,您要停止线程,您可以关闭网络连接,将抛出ioexception

2.如果线程读取文件,可以关闭流抛出ioexception

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


所以这取决于线程的工作情况。

实际上线程有方法
stop()
,所以您可以检查所有工作线程,并在每个线程上调用此方法

问题是“从哪里获得工作线程列表?” 更好的解决方案是将此列表存储在应用程序级别的某个位置,即每次创建工作线程时都将其放入特殊列表中。这是更好的解决方案,因为只有您知道线程是“工作”线程

但从理论上讲,您甚至可以动态地发现应用程序并检索线程。有一个静态方法
Thread.enumerate(Thread[]threads)
填充提供的数组。但是如何知道现在有多少线程正在运行呢?使用
Thread.activeCount()

由您确定工作线程。例如,您可以为此使用线程的名称或线程的堆栈跟踪

但是调用不推荐的方法
stop()
是一种犯罪。请参考此方法的javadoc了解原因


正确的方法是在应用层实现优雅的关闭机制。每个线程都应该检查一些标志,说明线程是否应该关闭,当该标志为true时,只需从
run()
方法返回即可。在这种情况下,关闭工作线程非常简单:只需将此标志的值设置为true,线程就会自行终止。这是“正确”的解决方案

有两种方法可以做到这一点

使线程中断

 Thread.interrupt()
它能解决问题吗?不,不会。只有当线程处于阻塞/等待状态时,才会中断线程。调用thread.interrupted不会停止线程。那它有什么帮助呢?您试图运行的代码。进行签入操作,如长时间运行的网络操作、数据库操作。这样可以中断大多数线程

终止进程并重新启动它

   Kill the app process and restart it from zygote (It might not be for all devs)

停止主线程是什么意思?你对工作线程意味着什么?你尝试过搜索相关的东西吗?StackOverflow有一个很好的搜索工具。你的问题不容易理解,请解释一下。
   Kill the app process and restart it from zygote (It might not be for all devs)