我正在寫一個動態壁紙,我在我的主要壁紙服務中分出兩個獨立的線程。一個更新,另一個更新。我的印象是,一旦你調用thread.start(),它會爲你處理所有事情,但經過一些試驗和錯誤之後,似乎如果我想更新並繪製線程繼續運行,我必須手動保持調用他們的run()方法?換句話說,不是在兩個線程上都調用start()而是忘記,我不得不手動設置一個延遲處理程序事件,該事件每隔16毫秒在更新和繪製線程上調用thread.run()。這是長時間運行線程的正確方法嗎?另外,爲了殺死線程,我只是將它們設置爲守護進程,然後將它們清零。這種方法好嗎?我看到使用某種形式的加入()/中斷()在while循環的大多數例子......我不明白,一個...我在Android中執行線程的方式是否正確?
1
A
回答
1
- 沒有
- 沒有
對於#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方法將繼續無限期地運行。
相關問題
- 1. 什麼是在Azure中執行多線程的正確方法
- 2. 當前在Linux中執行線程編程的正確方法
- 3. 我正在寫我的Vue組件的方式是否正確?
- 4. System.Event是否在主線程中執行?
- 5. Android Loader是否在單獨的線程中執行其工作?
- 6. 線程安全的方式來檢查,如果行插入之前存在 - 是我的代碼是否正確?
- 7. C#線程:在不正確的對象上執行的線程
- 8. 如何以編程方式確定ehcache是否正在運行?
- 9. 以編程方式確定IIS站點是否正在運行
- 10. 我是否在WinApi中正確執行動畫?
- 11. 確定線程是否正在睡眠
- 12. 正確的方式來結束Android中的線程
- 13. jQuery的不執行正確的方式
- 14. 爲什麼我的多線程執行是單線程模式
- 15. 如何確定我的DLL是否正在註冊或執行?
- 16. 在線程隊列上執行多個操作的正確方法是什麼?
- 17. 不執行多線程正確
- 18. 是我爲sparql執行寫的代碼是否正確?
- 19. Python,確定Unix進程是否正在運行的正確方法是什麼?
- 20. 在Android中異步執行方法的最佳方式(緊湊且正確)
- 21. 以正確的方式使用線程
- 22. 如何確定我是否以編程方式對數據庫執行權限?
- 23. 不確定我在boost日誌中的線程ID是否正確?
- 24. 線程在Android下進行通信的正確,有效的方法是什麼?
- 25. 以編程方式確定我正在運行的發行版
- 26. 執行後AsyncTask線程仍然存在,是否正常?
- 27. 這個算法是否正確執行?
- 28. 在android上執行線程
- 29. 如何在CUDA中執行正確的線程數
- 30. 程序按線路執行的方式