【问题标题】:Android Thread interupt when activity destroy does not work活动销毁不起作用时的Android线程中断
【发布时间】:2012-01-13 11:44:33
【问题描述】:

我是 android 开发的新手。我有一个活动,我创建一个线程来加载图像并在 imageView 上刷新它。该线程运行一个“无限循环”。我还想在活动停止时停止线程。下面您可以在示例中看到我已实现的内容,但它会引发异常并且线程继续工作或应用程序崩溃。有什么建议吗?

public class myActivity extends Activity{

   Thread tr;


   .... onCreate(){
        bla bla bla

        tr = new Thread();
        tr.start();
   }

   .....onDestroy(){
        tr.interupt();
   }

   bla bla bla
}

很抱歉没有编写完整的代码,但我现在不在家,我有代码。 我应该改变什么才能让它停止?

我还尝试了另一个技巧,我设置了一个公共静态布尔值并在 onDestroy 上将其设置为 false。

在线程中,“无限循环”工作为:

public static Boolean is = true;

在线程中:

while (is == true)....

onDestroy:

is = false; 

那么,有了这个技巧,既然循环会结束,线程会在结束它的操作时被杀死吗?

【问题讨论】:

    标签: android multithreading android-activity interrupt ondestroy


    【解决方案1】:

    线程在其run 方法完成执行时结束。因此,如果您通过将boolean 设置为false 来中断while 循环,然后控件到达run 的末尾,那么线程肯定会结束。这实际上是在 java 中停止线程的推荐方法。

    您应该记住的重要一点是始终将由一个线程修改并由另一个线程读取的变量设置为volatile,以防止变量缓存等优化破坏您的代码:

    public static volatile boolean is = true;
    

    【讨论】:

      【解决方案2】:

      不要使用第一种方法解决您的问题,java线程文档中不推荐这种方法。您的第二种方法是完成这项工作的最佳方式。现在在第二种方法中,当您在 onDestroy 方法中将“is”变量设置为 false 时,这将立即中断线程内的 while 循环。现在在这个while循环之后,如果你写了任何代码,那么它将继续执行,一旦它到达你的线程代码的末尾,线程将自行停止。

      【讨论】:

      • 谢谢伙计。但是,如果我遇到无法使用第二种方法的情况怎么办。我将如何停止线程?
      • 我认为您应该始终使用第二种方法。也许您可以通过线程上的 java 文档更清楚地了解为什么您不应该采用第一种方法。我认为无论你尝试用第一种方法做什么,也可以用第二种方法来完成
      猜你喜欢
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多