2011-06-16 65 views
0

考慮一個簡單的Android應用程序:有兩個TabActivities和後臺線程從服務器獲取整數值。如果數字是偶數,則必須在第一個標籤中顯示,否則在第二個中顯示。顯然我會做更復雜的事情,但這是基本模式。我如何去做這件事?我一直在撓我的腦袋大約一天,這裏是我遇到的事情:事件或處理程序?從線程調用方法

  1. 使用EventHandlers。兩個TabActivities註冊用於偵聽my_events,並且當線程接收到一個值時,它會'拋出my_event',然後調用這兩個活動中的特定方法並傳遞值。

  2. 處理程序的使用。

我以前沒有使用過這兩個概念,我想知道哪個可能是更好/正確的路線。此外,沿着所選擇的路線的任何更多提示將被讚賞。另外,該線程是否應該從服務類運行?

回答

0

當您創建線程時,只需將選項卡的對象傳遞給它,然後在執行過程中,您可以輕鬆地將所需的文本放入選項卡中。

+0

謝謝,但我打算在從線程接收事件時執行的功能非常複雜,因此我不打算在線程中執行此操作。 – Mahesh 2011-06-16 21:29:59

0

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

AsyncTask透明地爲你使用Handlers,但是如果你願意,你可以使用Raw Handlers。你需要記住的東西基本都是

  • 你可以/應該只從主應用程序線程
  • 代碼在處理程序更新UI將總是在創建該處理器
  • 線程運行
  • 必須在具有活套的線程上創建處理程序(主線程具有活套)
  • 要將處理程序創建爲匿名內部類或將其交給上下文的引用時要小心,因爲這會創建內存的潛力泄漏

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

+0

謝謝..我終於建立了我自己的事件處理程序,看起來他們工作得很好.. – Mahesh 2011-06-22 17:23:52

相關問題