2016-03-19 21 views
0

私はAndroidで新しく、スレッド化に問題があります。ここに私が欲しいものがあります:whileループ内でAsyncTaskを実装する方法

ArrayList<MODEL_Records> records = SQLITE.getInstance().getRecords(); 
int length = records.size(); 
for(int i =0; i < length; i++){ 
    (new AsynchTask().execute(records.get(i))); 
    // wait for the asynchTask to finish executing before iterating 
} 

私は正しい質問をしていますか?誰かが私を正しい道に向けることができますか?

+1

あなたはそれを決してしません。非同期タスクのポイントは、並行して動作することです。結果を待つ場合は、最初にAsyncTaskを使用する必要はありません。 –

+0

私は以下のように、あなたのAsyncTask#doInBackground()の中にあなたのwhileループを置いて、AsyncTask#onPostExecute()で必要なものを呼び出してください。これは、遅い処理をバックグラウンドスレッドにプッシュします。 –

+0

AsyncTask内でループを使用する –

答えて

1

whileループはコードをブロックし、ANR(App Not Responding?)エラーを強制するので、UIスレッドでこれを行うべきではありません。

さらに、バックグラウンドスレッド(AsyncTask)でタスクを実行するには、UIスレッドをブロックしてはいけませんが、これは逆効果です。

また、getRecords()メソッドが何をしているのかはわかりませんが、DBにアクセスしようとしなくても、配列にアクセスしているようです。

asynctaskをwhileループに入れるのではなく、whileループをAsyncTask#doInBackground()に置き、AsyncTask#onPostExecute()で必要なものを呼び出します。これは、遅い処理をバックグラウンドスレッドにプッシュします。

関連する問題