Android ждать активности для потока - PullRequest
1 голос
/ 07 января 2012

Как я могу ждать обработки потока в действии. Мой поток загружает картинку .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
    }

Этот код продолжается без загруженного изображения, изображение загружается позже. Подходят ли для этого семафоры?

Ответы [ 3 ]

1 голос
/ 07 января 2012

Если вы не хотите ограничиваться ASyncTask, используйте BroadcastReceiver. Вы будете прослушивать BroadcastReceiver в своем основном классе, зарегистрировав его в методе OnResume () упражнения. Когда ваша служба или фоновая активность завершатся, вы запустите 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);
        }
0 голосов
/ 07 января 2012

Вы должны использовать 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 голосов
/ 07 января 2012

Используйте AsyncTask в паре с диалогом LoadingBar.Это будет отображать прогресс по мере загрузки png.

Затем, как только загрузка будет завершена, используйте метод onPostExecute () в AsyncTask, чтобы продолжить то, что вы хотите, чтобы ваша деятельность выполняла.

...