2011-03-07 180 views
1

我想了解後臺線程是如何工作的。我從我的活動中調用後臺線程,並在此活動中實現我的線程處理程序。比方說,當我的後臺線程正在運行時,用戶轉到活動b。當我的後臺線程完成其操作時會發生什麼,我將不得不在應用程序中的每一個單獨的活動中實現處理程序,還是會自動調用來自活動a的處理程序,並引導用戶進行活動?Android中的處理程序和線程

回答

1

Handler的javadoc說:

Each Handler instance is associated with a single thread and that thread's 
message queue. 

由於創建的所有活動和他們的方法調用在主應用程序線程(也稱爲EDT),這是你創建你的處理器,那麼當你調用你的處理器(通過post()或類似的方法)從後臺線程執行,它將在EDT中執行。

what happens when my background thread finishes its operation will i have to 
implement handlers in every single activity in the app or will the handler from 
activity a will be automatically invoked and will direct the user to activity a? 
  1. 當後臺線程調用運行的比的run()方法handler.post(可運行)將在線程您創建處理器(=主應用程序線程)執行。
  2. 不,它不會將用戶引導至活動A或使其可見。它將執行您在活動A中定義的runnable.run()方法。
1

一般而言,您通常希望使用AsyncTask進行線程化,因爲它允許您使用onPreExecute()onPostExecute()中的UI線程。

當關聯的活動未處於活動狀態時,您不應該做太多事情。理想情況下,你會停止onPause()的線程。

對於需要有自己的生活除了一個活動的任務,建議Services。從該文檔:

A服務是表示任一應用程序的 同時不 交互的用戶來執行運行較長 操作或用於其他應用程序使用提供的功能 慾望的應用組件 。

然後,您可以讓多個活動與執行長時間運行的相同服務進行交互。

+0

感謝您的回覆。我目前使用異步任務從Web服務下載數據並插入到數據庫。我正在看使用後臺線程的原因是因爲我希望用戶能夠使用我的應用與數據從數據庫,而我正在下載新的或更新的信息。 – user648929 2011-03-08 00:12:27

+1

@ user648929這聽起來像是你想讓一個服務在後臺工作中做的,所以你不必擔心Activity的生命週期與下載有關。 – 2011-03-08 00:44:15