2012-07-10 74 views
0

考慮從服務器獲取數據並將其發佈到UI列表視圖中的情況,但這是一個正在進行的活動,它從不停止。android多線程和網絡主線程異常;

taskA{ //fetches data over network 

if(!update) 
    fetch();//network operation 

} 

taskB{//using this data UI is updated at runtime just like feed. 

if(update) 
    show();//UI operation 
} 

任務A首次啓動時,它完成taskB開始到那個時候一後正在睡覺,反之亦然,去,現在我面臨的問題是:

  1. 兩種操作都必須在工作線程
  2. 兩個操作都在循環,直到活動還活着。
  3. 如果處理程序用於將UI操作發佈到主線程,則taskB似乎停止。

任何人都可以請我建議一個設計,讓這個工作?

回答

2

AsyncTask正在爲你做這項工作。你可以將它作爲Activity主類下的內部類。

http://developer.android.com/reference/android/os/AsyncTask.html

示例代碼

private class YourTask extends AsyncTask<URL, Integer, String> { 
    protected String doInBackground(URL... urls) { 
     // Fetch Data (Task A) 
     return "Result"; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     // Show progress 
    } 

    protected void onPostExecute(String result) { 
     // Show UI after complete (Task B) 
    } 
} 
+0

這是一個很好的答案,但只有在用戶旋轉設備時活動不旋轉纔是正確的。 – 2012-07-10 09:33:53

+1

處理並不複雜。有關更具體的解決方案,請參閱http://stackoverflow.com/questions/2620917/how-to-handle-an-asynctask-during-screen-rotation。 – 2012-07-10 09:56:07

+0

如果我錯了,請糾正我,但如果我使用asynctask進行重複操作(如taskA),則它會每次創建一個新線程以執行相同的操作。 – user1254554 2012-07-10 10:23:34

0

您還可以使用IntentService你可以檢查一些sample code

版本的Android服務是輕量級的,但更復雜的設置。

AsyncTask非常容易,但不推薦,因爲它有許多缺點和缺陷。 你也可以看看Loaders,但它不像AsyncTasks那麼容易。

相關問題