0

從網絡中檢索東西無法在android的UI線程中完成。 我試圖解決這個問題是這樣的...輸入錯誤計數的線程

for(i=0;i<list.size();i++){ 

    //add a UI element 

    new Thread(new Runnable(){ 
     public void run(){ 
      //retrieve online content 
     } 
    }).start(); 
    LinearLayout.addView(MyView); 

}

android docs

線內的部分類似的例子存取清單與get()方法。當「i」應該爲0以獲得列表中的第一項時,「i」實際上是1,並且如果只有一個項目,則導致OutOfBoundsException。我會猜測我在這裏遇到了線程安全問題。有沒有簡單的方法來解決這個問題?

回答

2

閱讀此http://developer.android.com/reference/android/os/AsyncTask.html以使用AsyncTask在後臺執行任務,而不是使用Threads

AsyncTasks提供很好的包裝來執行後臺任務和postExecute任務(直接在UI線程)等

編輯: 也從你的代碼林不知道這將是正確的做法......看起來你正在運行您的list中每個元素的線程。

,是

LinearLayout.addView(MyView); 

真的取決於你在後臺執行任務嗎?如果是的話,在從網絡(以及線程內部)獲取所有數據之後執行一次,因爲那樣只有您會知道該任務已完成。如果沒有,那麼沒有理由把它放在這裏..

而必須當線程/任務是在運行一個線程(異步更好的任務),從網絡檢索和顯示/更新UI ...

+0

異步任務非常感謝 – Jack 2012-02-23 07:55:02