0

ネットワークからの情報の取得は、アンドロイドのUIスレッドでは実行できません。 私はandroid docs間違った数のスレッドに入る

にスレッド内の一部は、get()メソッドでリストにアクセスするので...

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); 

}

のようにこの問題を回避するために同様の例をしようとしています。 "i"がリストの最初の項目を取得するために0になるべきである場合、 "i"は実際には1であり、項目が1つしかない場合はOutOfBoundsExceptionが発生します。ここでスレッドの安全性に問題があると推測します。この問題を簡単に解決する方法はありますか?

答えて

2

このhttp://developer.android.com/reference/android/os/AsyncTask.htmlを読むと、Threadsではなく、バックグラウンドでタスクを実行するのにAsyncTaskを使用します。

AsyncTasksは(直接UIスレッド上で)バックグラウンド・タスクとpostExecuteのタスクを実行するために素敵なラッパーを提供など

EDIT:それは正しい方法だろうかわからないあなたのコードイムからも ...あなたが実行しているように見えますlistの各要素のスレッド。

LinearLayout.addView(MyView); 

あなたがバックグラウンドで実行するタスクに本当に依存しているのですか?はいの場合は、ネットワークからすべてのデータを取得した後に(そしてスレッド内で)一度実行します。これは、そのタスクが完了したことだけを知るためです。その後、いない場合は、ここでそれを置くために理由もなく...

代わりにあなたが

+0

...ネットワークから取得するための単一のスレッド(より良い非同期タスク)を実行し、スレッド/タスクが終わった時に/更新UIを示さなければなりません非同期タスクはすばらしい働きをした – Jack

関連する問題