簡體   English   中英

在 android 中讓 UI 線程等到服務完成

[英]Making the UI thread to wait untill the service is finished in android

大家好,我有一個問題,我想讓 UI 線程等到服務完成,誰能告訴我如何實現這個?

一種解決方案:

  • 在您的 UI 活動中創建一個處理程序,以便正確地讀取和寫入變量(例如在 onCreate 函數中創建它)
  • 在 UI 活動中放置一個廣播接收器
  • 當您的服務終止時,發送一條廣播消息
  • 您的 UI 活動將使用廣播接收器接收消息
  • 將您的指示發布給處理程序

教程關鍵詞:

  • 廣播接收器
  • 發送廣播(意圖)
  • 處理程序發布可運行

希望能幫助到你

我可以告訴你,你永遠不應該讓 UI 線程等待:

總而言之,保持 UI 線程暢通對應用程序 UI 的響應能力至關重要。

這來自無痛線程的 Android 開發人員頁面,您應該完整閱讀。 你到底想做什么?

我將假設您已經正確設置了與您的 Activity 通信的服務設置。

您可以使用Semaphore在服務執行時阻塞 UI 線程。 有很多方法可以做到這一點,但為了簡單起見,這個Semaphore可以是實用程序 class 中的 static 字段。

public class UtilityClass {
   public static final Semaphore LOCK = new Semaphore(0);
}

在您的 UI 線程中,您可以執行以下操作: UtilityClass.LOCK.acquire()

在您的服務中,完成后您將釋放鎖: UtilityClass.LOCK.release()

請記住,可能需要進行更多檢查以確保此方法中沒有錯誤。 您將需要查看Semaphore文檔。 例如,在發布許可證之前,您可能需要檢查是否有零個availablePermits()

我認為這可以回答您的問題,但請注意,阻塞 UI 線程會導致應用程序無響應。 換句話說,這種方法不是最佳實踐,應該避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM