我在Android中执行线程的方式是否正确?

时间:2010-05-17 21:38:30

标签: java android multithreading

我正在写一个动态壁纸,我正在我的主要壁纸服务中分离两个单独的线程。一个更新,另一个绘制。我的印象是,一旦你调用thread.start(),它会为你处理一切,但经过一些试验和错误,似乎如果我想要我的更新并绘制线程继续运行,我必须手动保持调用他们的run()方法?换句话说,我不必在两个线程上调用start()而忘记,我必须手动设置一个延迟的处理程序事件,该事件在每16毫秒更新和绘制线程上调用thread.run()。这是一个长期运行的线程的正确方法吗?

另外,为了杀死线程,我只是将它们设置为守护进程,然后将它们归零。这个方法好吗?我看到的大多数示例在while循环中使用某种join()/ interrupt()...我不明白那个...

2 个答案:

答案 0 :(得分:1)

  1. 没有
  2. 没有
  3. 对于#1,我相信你的线程正在终止。保留run()方法后,该线程被视为已终止。如果您希望线程“永远”运行,则需要重复您的操作。

    对于#2,即使您丢失了对它的所有引用,该线程仍将继续运行。我会向工作线程建议一个信号或条件,然后在主线程中使用join()。

答案 1 :(得分:0)

和Yann说,如果你不得不重新启动你的线程,这意味着你可能没有正确循环。

假设你的壁纸只有一个球在屏幕上移动,这将是一个示例run()方法:

boolean isAnimating;

public void run() {
  isAnimating = true;
  while(isAnimating) {
     moveBall();
     isAnimating = isWallpaperVisible(); // or whatever conditions apply to not keep animating
  }

}

这样你的run方法将无限期地继续运行。