2012-01-06 11 views
1

アクティビティのスレッド処理を待つ方法を教えてください。私のスレッドは、リモートサーバーから.png画像をダウンロードします。私は写真をダウンロードするのを待っています、そして、活動は処理の中で続けられます。スレッドのアンドロイド待機アクティビティ

活性

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.initializer); 

    ImageView mainImageView = (ImageView) findViewById(R.id.imageView); 
    ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); 

    InitProgress initProgress = new InitProgress(progressBar); // initialization progress bar 
    MyMap map = new MyMap(); // there is written the picture as Drawable from thread 

    MapDownloader mapDownloader = new MapDownloader(map,initProgress); // thread that download picture from server 

    // wait ??? 

    mainImageView.setBackgroundDrawable(buildingMap.getDrawableMap()); // using downloaded picture 
    } 

このコードは、画像を後でダウンロードされ、ダウンロードされた画像なしで継続します。セマフォーはこの目的に適していますか?

答えて

0

AsyncTaskをLoadingBarダイアログと組み合わせて使用​​します。これにより、pngがダウンロードされるときに進行状況が表示されます。

ダウンロードが完了したら、AsyncTaskのonPostExecute()メソッドを使用して、アクティビティの実行を継続します。

0

この目的のためには、AsyncTaskを使用する必要があります。あなたはBroadcastReceiverを使用し、ASyncTaskに拘束されたくない場合はここで

は例

public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap> { 

ImageView imageView = null; 

@Override 
protected Bitmap doInBackground(ImageView... imageViews) { 
this.imageView = imageViews[0]; 
return download_Image((String)imageView.getTag()); 
} 

@Override 
protected void onPostExecute(Bitmap result) { 
imageView.setImageBitmap(result); 
} 


private Bitmap download_Image(String url) { 
... 

}

+0

リモートサーバーからダウンロードした画像にAsyncTaskを使用して他のスレッドを使用する必要はありませんか? – misco

+0

AsyncTaskは、別のスレッドで実行されます。 –

+0

いいえ、AsyncTaskをアクティビティから継承してクラスを呼び出すと、私のアクティビティはonPostExecuteを待機しますか? – misco

1

です。アクティビティのOnResume()メソッドに登録することで、メインクラスのBroadcastReceiverをリッスンします。サービスまたはバックグラウンドアクティビティが終了すると、BroadcastReceiverがトリガされ、バックグラウンドサービスが実行されたことをアクティビティに伝えます。

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent service = new Intent(context, WordService.class); 
     context.startService(service); 
     } 
関連する問題