1

我是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)....

销毁:

is = false; 

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

4

2 回答 2

3

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

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

public static volatile boolean is = true;
于 2012-01-13T12:41:49.750 回答
0

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

于 2012-01-13T12:11:55.200 回答