2010-05-17 64 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方法將繼續無限期地運行。

相關問題