Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
在android中重新创建活动时如何销毁旧线程?_Android_Multithreading - Fatal编程技术网

在android中重新创建活动时如何销毁旧线程?

在android中重新创建活动时如何销毁旧线程?,android,multithreading,Android,Multithreading,我正在使用线程创建应用程序。当活动创建线程将启动时,但当我重新创建活动时,新线程正在运行,旧线程也在运行。所以我想销毁旧线程。您永远不会销毁线程。这样做会使系统处于不可知的状态,可能会陷入僵局。线程需要自己结束,因为这是确保线程干净地完成的唯一方法。正确答案如下(哪一个取决于您的课程环境): 1) 不要重新创建活动。如果这是由于配置更改(如旋转),请通过清单中的onConfigChange告诉Android不要这样做 2) 在onDestroy中,在线程对象上设置一个标志。让线程定期检查标志并结

我正在使用线程创建应用程序。当活动创建线程将启动时,但当我重新创建活动时,新线程正在运行,旧线程也在运行。所以我想销毁旧线程。

您永远不会销毁线程。这样做会使系统处于不可知的状态,可能会陷入僵局。线程需要自己结束,因为这是确保线程干净地完成的唯一方法。正确答案如下(哪一个取决于您的课程环境):

1) 不要重新创建活动。如果这是由于配置更改(如旋转),请通过清单中的onConfigChange告诉Android不要这样做

2) 在onDestroy中,在线程对象上设置一个标志。让线程定期检查标志并结束自身。这样就可以干净利落地完成。在这种情况下,您需要对线程进行防御性编码,以避免做任何有害的事情,您必须或多或少地假设可以运行两个实例。如果线程实际上是一个异步任务,那么在访问onPostExecute中的UI组件之前,需要检查其活动是否有效

3) 对内置LoaderManager或滚动您自己的版本使用加载程序类型机制,尝试在不重新启动的情况下使用同一线程


第二个问题很棘手,但肯定能解决。1和3更容易,但并不总是可能

您没有提到
thread.interrupt()
。为什么?终止线程是一种不好的方法吗?中断基本上是方法2。使用它很好,只是要知道它与立即停止线程不同,它会导致需要处理的异常,并且您需要检查线程中是否有ISINTERRUTED