簡體   English   中英

將數據從UI線程發送到主活動“ Android”未在其中創建的另一個線程

[英]send data from the UI thread to another thread which is not created in by the Main Activity “Android”

我檢查了幾個網站,但沒有找到這個問題的答案。

我有一個UI線程,該線程以特定頻率調用帶有alarmManager的服務。 並且該服務本身調用另一個IntentService,后者啟動服務器/客戶端線程。 我想知道是否可以使服務器/客戶端線程與UI線程通信?

非常感謝你的幫助。

IntentService.onCreate()方法始終在UI線程上執行。 您可以在該方法內創建一個新的Handler實例,並將其存儲在IntentService實現的實例或類數據成員中。 您可以使用此Handler程序post(Runnable)在UI線程上執行的sendMessage(Message) ,也可以使用sendMessage(Message)進行發布,該handleMessage(Message)將由handleMessage(Message)實現在UI線程上進行處理。 為了簡單起見,我建議堅持使用post(Runnable)

根據您的評論進行更新:

假設您的后台線程自己進行連續處理並且沒有ArrayList<MyLocation> ,最簡單的方法是創建一個隊列(例如ArrayList<MyLocation>可以工作),然后從UI將每個新位置添加到它的尾部線。 同時,后台線程從頭部拾取下一個位置並按預期進行處理。 這是在兩個線程之間進行通信的一種非常簡單的異步方式(本質上是LooperMessage工作方式的簡化版本)。

但是,此方法的主要缺點是您的后台線程始終很忙,因此如果沒有傳入的位置更新,則會占用CPU資源。 更好的選擇是將您的后台線程更改為Looper線程並向其發送消息。 這是一個如何創建Looper線程並向其發送消息的示例。

暫無
暫無

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

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