2010-05-17 26 views
1

我正在写一个动态壁纸,我在我的主要壁纸服务中分出两个独立的线程。一个更新,另一个更新。我的印象是,一旦你调用thread.start(),它会为你处理所有事情,但经过一些试验和错误之后,似乎如果我想更新并绘制线程继续运行,我必须手动保持调用他们的run()方法?换句话说,不是在两个线程上都调用start()而是忘记,我不得不手动设置一个延迟处理程序事件,该事件每隔16毫秒在更新和绘制线程上调用thread.run()。这是长时间运行线程的正确方法吗?另外,为了杀死线程,我只是将它们设置为守护进程,然后将它们清零。这种方法好吗?我看到使用某种形式的加入()/中断()在while循环的大多数例子......我不明白,一个...我在Android中执行线程的方式是否正确?

回答

1
  1. 没有
  2. 没有

对于#1,我相信你的线程正在终止。一旦run()方法被留下,该线程就被视为终止。如果您希望线程“永久”运行,您需要重复您的操作。

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

0

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

说出你的壁纸只是有一个球在屏幕上移动,这将是一个样本run()方法:

boolean isAnimating; 

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

} 

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

相关问题