如何在活动中等待线程处理。我的线程从远程服务器下载.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 :(得分: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) {
...
}