大家好,我有一個問題,我想使UI線程等待,直到服務已完成任何人可以告訴我如何實現這一目標?使UI線程等待,直到服務完成在android
0
A
回答
1
我打算假設您已經正確地設置了與您的活動進行通信的服務設置。
您可以使用Semaphore
在服務執行時阻止UI線程。有很多方法可以做到這一點,但爲了簡單起見,這個Semaphore
可能是一個工具類中的靜態字段。
public class UtilityClass {
public static final Semaphore LOCK = new Semaphore(0);
}
在你的UI線程,你會做這樣的事情:UtilityClass.LOCK.acquire()
在您服務,做您將釋放鎖時:UtilityClass.LOCK.release()
記住一些更多的檢查可能是必要的以確保這種方法沒有錯誤。您需要查看Semaphore
文檔。例如,在發佈許可證之前,您可能需要檢查是否存在零數據availablePermits()
我認爲您回答的問題存在,但請注意,在UI線程上阻塞會導致應用程序無響應。換句話說,這種方法不是最佳實踐,應該避免。等等
1
我可以告訴你,你應該永遠,永遠可以使UI線程等待:
總之,這是你的應用程序的用戶界面的響應速度至關重要,以保持UI線程暢通。
這是來自Painless Threading的Android開發者頁面,您應該完整閱讀。無論如何你真的想做什麼?
1
一個解決方案:
- 在UI活動,以創建一個Handler來propertly讀&寫變量(例如在OnCreate函數創建)
- 把廣播接收器的UI活動
- 當你的服務終止,發送廣播消息
- 你的UI活動將收到的廣播接收器
- 波什的消息牛逼你的指令到處理器
鍵字教程:
- 廣播接收機
- sendBroadcast(意向)
- 處理程序後可運行
希望它可以幫助
相關問題
- 1. Android:如何使UI線程等待AsycTask完成
- 2. 等待,直到fs.readFileSync完成
- 3. 等待,直到gobalEval完成
- 4. 等待,直到AJAX完成
- 5. 使主線程等待,直到所有其他Qthread完成
- 6. 線程內服務 - 需要等到線程完成[Android]
- 7. 若要完成線程的等待(Android)
- 8. 讓Android MainActivity等待線程完成
- 9. Java等待線程完成
- 10. Android:如何等待Timer和Timertask完成UI線程的工作
- 11. 等待線程完成而不阻塞UI線程
- 12. 如何讓UI線程等待後臺線程完成?
- 13. Java多線程等待線程完成
- 14. IOS,Swift,動畫鏈接,等待主線程,直到鏈完成
- 15. Android咖啡不等待UI完成
- 16. UIView animateWithDuration等待,直到動畫完成
- 17. 如何等待,直到System.Diagnostics.Process.Start完成
- 18. Java等待定時器直到完成
- 19. 等待PathTransition完成,直到JavaFX的
- 20. WebBrowser.Print()等待直到完成。 .NET
- 21. 如何等待,直到com.sun.codemodel.JCodeModel.build()已完成
- 22. jquery等待直到AJAX調用完成
- 23. 有主線程等待一個線程完成任務(但沒有完成)
- 24. 製作父線程一直等到子線程完成在VC
- 25. 在主線程上等待,直到完成一個異步過程?
- 26. 等待,直到完成onChildAdded在firebase querys,Android
- 27. 強制服務中的線程等待另一個線程完成
- 28. 等待承諾完成服務
- 29. 等待$ http.get完成服務調用時
- 30. Android Expresso - 等待異步任務完成
永遠不要阻止UI線程 – fmo 2012-04-24 21:06:00
我沒有不建議這是個好主意。但是OP特別提出了「如何」這樣做。這是一種方法。 – 2012-04-30 00:53:56
但如果我的活動onCreate我需要從服務的數據,我可以等到服務結束?好的,我阻止了UI線程,但是我有其他方法嗎? – Accollativo 2014-11-03 23:04:31