【问题标题】:android wait activity for threadandroid等待线程的活动
【发布时间】:2012-01-06 20:29:33
【问题描述】:

如何在活动中等待线程处理。我的线程从远程服务器下载 .png 图片。我想等待下载图片,然后activity会继续处理中。

活动

    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
    }

此代码继续没有下载图片,图片稍后下载。信号量是否适合此目的?

【问题讨论】:

    标签: android multithreading android-activity wait


    【解决方案1】:

    如果您不想受限于 ASyncTask,请使用 BroadcastReceiver。您将通过在活动的 OnResume() 方法中注册来侦听主类中的 BroadcastReceiver。当您的 Service 或后台活动完成时,您将触发 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);
            }
    

    【讨论】:

      【解决方案2】:

      使用与 LoadingBar 对话框配对的 AsyncTask。这将显示 png 下载的进度。

      下载完成后,使用 AsyncTask 中的 onPostExecute() 方法继续执行您希望 Activity 执行的操作。

      【讨论】:

        【解决方案3】:

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

        }

        【讨论】:

        • 从远程服务器下载图片时不需要使用其他线程和AsyncTask吗?
        • 很好,当我从活动中调用类扩展与 AsyncTask 时,我的活动会等待 onPostExecute 吗?
        • 活动不会等待 onPostExecute。但是您可以在 PostExecute 上更新 UI。这意味着您可以在 onPreExecute() 中显示进度对话框或其他内容,然后在 onPostExecute 中将其删除。 UI只能在异步任务onPreExecute和onPostExecute()两个方法中更新
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-21
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        相关资源
        最近更新 更多