我正在写一个动态壁纸,我正在我的主要壁纸服务中分离两个单独的线程。一个更新,另一个绘制。我的印象是,一旦你调用thread.start(),它会为你处理一切,但经过一些试验和错误,似乎如果我想要我的更新并绘制线程继续运行,我必须手动保持调用他们的run()方法?换句话说,我不必在两个线程上调用start()而忘记,我必须手动设置一个延迟的处理程序事件,该事件在每16毫秒更新和绘制线程上调用thread.run()。这是一个长期运行的线程的正确方法吗?
另外,为了杀死线程,我只是将它们设置为守护进程,然后将它们归零。这个方法好吗?我看到的大多数示例在while循环中使用某种join()/ interrupt()...我不明白那个...
答案 0 :(得分:1)
对于#1,我相信你的线程正在终止。保留run()方法后,该线程被视为已终止。如果您希望线程“永远”运行,则需要重复您的操作。
对于#2,即使您丢失了对它的所有引用,该线程仍将继续运行。我会向工作线程建议一个信号或条件,然后在主线程中使用join()。
答案 1 :(得分:0)
假设你的壁纸只有一个球在屏幕上移动,这将是一个示例run()方法:
boolean isAnimating;
public void run() {
isAnimating = true;
while(isAnimating) {
moveBall();
isAnimating = isWallpaperVisible(); // or whatever conditions apply to not keep animating
}
}
这样你的run方法将无限期地继续运行。