[英]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將每個新位置添加到它的尾部線。 同時,后台線程從頭部拾取下一個位置並按預期進行處理。 這是在兩個線程之間進行通信的一種非常簡單的異步方式(本質上是Looper
和Message
工作方式的簡化版本)。
但是,此方法的主要缺點是您的后台線程始終很忙,因此如果沒有傳入的位置更新,則會占用CPU資源。 更好的選擇是將您的后台線程更改為Looper線程並向其發送消息。 這是一個如何創建Looper線程並向其發送消息的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.