线程的android等待活动

时间:2012-01-06 20:29:33

标签: android multithreading android-activity wait

如何在活动中等待线程处理。我的线程从远程服务器下载.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 个答案:

答案 0 :(得分:1)

如果您不想被约束到ASyncTask,请使用BroadcastReceiver。您将通过在活动的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);
        }

答案 1 :(得分:0)

使用与{Loading}对话框配对的AsyncTask。这将在png下载时显示进度。

然后,一旦下载完成,请使用AsyncTask中的onPostExecute()方法继续您想要的活动。

答案 2 :(得分:0)

您应该使用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) {
...

}