我正在寫一個動態壁紙,我在我的主要壁紙服務中分出兩個獨立的線程。一個更新,另一個更新。我的印象是,一旦你調用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. System.Event是否在主線程中執行?
- 4. 如何以編程方式確定ehcache是否正在運行?
- 5. 以編程方式確定IIS站點是否正在運行
- 6. 正確的方式來結束Android中的線程
- 7. 確定線程是否正在睡眠
- 8. jQuery的不執行正確的方式
- 9. 不執行多線程正確
- 10. 在Android中異步執行方法的最佳方式(緊湊且正確)
- 11. 是我爲sparql執行寫的代碼是否正確?
- 12. 以正確的方式使用線程
- 13. 如何確定我是否以編程方式對數據庫執行權限?
- 14. 這個算法是否正確執行?
- 15. Android - 如何正確執行後臺線程?
- 16. 確定進程是否正在運行?
- 17. 是否有可能更改線程在Ruby中正在執行的操作?
- 18. 線程的正確方法
- 19. 檢查線程是否完成的正確方法?
- 20. 如何以正確的方式在rails中執行history.js?
- 21. 我是否以正確的方式構建我的應用程序? - Backbone.js
- 22. 我應該在我的查詢中執行方程式,或者在本地執行方程式並更新db
- 23. 爲什麼線程在c#中不能正確執行?
- 24. 正確執行MVC for Android
- 25. Msmq什麼是用戶的正確執行方式
- 26. 使用數據庫與執行是正確的方式?
- 27. 執行存儲過程參數驗證的「正確」方式
- 28. 同步方法是否在UI線程(Android)的不同線程上運行?
- 29. 無法在Android中正確實現我的線程
- 30. 我對C#線程池的理解是否正確?