2012-05-09 9 views
0

ページに30以上の画像を読み込む必要があります(ティーザーテキスト付き)。 AsyncTaskを介してすべてのイメージを読み込みますが、メインスレッドのビューに対してのみ変更を実行できるので、現在のレイアウトを変更することはできません。私のアプリが「ページ読み込み」中にハングする必要がないように、非同期的にすべてを読み込む最良の方法は何ですか?アンドロイドのバックグラウンドビューのアクティビティ

答えて

0

レイアウトを変更できないのはなぜですか? AsyncTaskの場合は、onProgressUpdateがUIスレッドで実行されます。 doInBackgroundコードにpublishProgressと電話するだけです。

==更新==

private class LoadImageTask<Url, String, String> extends AsynTask{ 
    doInBackground(Url... urls){ 
     for(int i=0; i<urls.length; i++){ 
      File img = DownloadImage(urls[i]); // Your download method.. 
      publishProgress(img.filename);  // Suppose it is saved in sd card 
      // publish progress will call onProgressUpdate immediately, but on different thread 
     } 
    } 

    onProgressUpdate(String filename){ 
     // Update the UI.. this method will run on UI thread 
     displayImage(filename); 
    } 
} 
+0

意志を使用することができますか?それとも、私のメインスレッドを「一時停止」しますか? – Jacksonkr

+0

onProgressUpdateは一時停止するため、UIを更新するだけです。読み込みはdoInBackgroundで行われると仮定します。更新の回答を確認してください。 – xandy

0

私はあなたがバックグラウンドでビューを構築することができるとは思いません。あなたは、進行中のダイアログを表示して、ユーザがアプリケーションがなぜビジーであるのかを理解できるようにすることをお勧めします。

+0

タスクが別のスレッドで実行されていない場合は、進行状況ダイアログもブロックされます。 – xandy

0

クラスが活動を拡張する場合、あなたはまだかかわらず、非同期で実行

runOnUiThread(new Runnable() { 
    public void run() { 
     //Update UI elements in this block 
    } 
}); 
+0

これは私の主なスレッドをブロックしますが、終了するまでですか? – Jacksonkr

+0

それはキューに入れられるので、メインスレッド上で実行されます。イメージをロードするスレッドについては、引き続き実行されます。 – PinoyCoder

関連する問題