簡體   English   中英

事件還是處理程序? 從線程調用方法

[英]Events or Handlers? Invoking methods from a thread

考慮一個簡單的Android應用程序:有兩個TabActivities和一個在后台從服務器獲取整數值的線程。 如果數字是偶數,則必須在第一個選項卡中顯示,否則在第二個選項卡中顯示。 顯然,我會做一些更復雜的事情,但這是基本模式。 我該怎么做呢? 我已經撓頭了大約一天,這是我遇到的一些事情:

  1. 使用EventHandlers。 兩個TabActivities注冊用於偵聽my_events,當線程接收到一個值時,它會“引發my_event”,然后在這兩個Activite中調用特定的方法並傳遞值。

  2. 使用處理程序。

我之前沒有使用過這兩個概念,我想知道哪種方法更好/正確。 此外,將理解沿所選路線的任何更多提示。 另外,是否應該從服務類運行該線程?

創建線程時,只需將選項卡的對象傳遞到其中,然后在執行時就可以輕松地將所需的文本放入選項卡中。

可能您想使用AysncTask。 如果這樣做,則要將這些值插入onProgressUpdate()方法中的相應選項卡中。 由於傳遞給此方法的參數實際上可能無法充分表示傳入的數據,因此您只想將新數據放在可以從onProgressUpdate()方法訪問的位置(可能在成員變量中)。 請記住,由於onProgressUpdate中的代碼在應用程序的主線程上運行,而doInBackground中的代碼在后台線程上運行,因此可能需要同步對該成員變量的訪問,因此這些方法中的代碼將同時運行。

AsyncTask為您透明地使用處理程序,但是您可以根據需要使用原始處理程序。 您需要牢記的基本內容是

  • 您可以/應該僅從主應用程序線程更新UI
  • 處理程序中的代碼將始終在創建處理程序的線程上運行
  • 必須在具有Looper的線程上創建處理程序(主線程具有Looper)
  • 如果將Handler創建為匿名內部類或將其傳遞給Context時要小心,因為這可能會導致內存泄漏

可能應由服務調用該線程,但是如果僅在存在要更新的UI時才需要存在該線程,則可能沒有什么意義。

暫無
暫無

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

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