活动销毁时不起作用的Android线程中断

时间:2012-01-13 11:44:33

标签: android multithreading android-activity interrupt ondestroy

我是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; 

所以,有了这个技巧,因为循环将结束,线程会在结束它的操作时被杀死吗?

2 个答案:

答案 0 :(得分:3)

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

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

public static volatile boolean is = true;

答案 1 :(得分:0)

使用第一种方法不解决您的问题,在java线程文档中不建议使用此方法。你的第二种方法是做这项工作的最佳方式。现在在第二种方法中,当你在onDestroy方法中将“is”变量设为false时,这将立即破坏线程内的while循环。在此while循环之后如果你已经编写了任何代码,那么它将继续执行,一旦它到达你的线程代码的末尾,线程就会自动停止。