首页 > 解决方案 > AsyncTask 类的 onProgressUpdate() 不起作用

问题描述

我想显示下载图像的进度条并设置自定义颜色我在 onProgressUpdate() 中执行此操作,但它不起作用,它也不会出现在 logcat 中。它还会显示白屏,直到下载完成,如果我在下载过程中按下后退按钮下载,它会崩溃。

我的代码:

public class DownloadImage extends AsyncTask<String ,Void, Bitmap> {

    Bitmap bit;

    @Override
    protected Bitmap doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            return BitmapFactory.decodeStream(connection.getInputStream());
        } catch(Exception e){
            Log.i("error download", "doInBackground: "+e.getMessage());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        Log.i("download", "onPostExecute: ");
        imageView.setImageBitmap(bitmap);
        progressBar.setVisibility(View.GONE);
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        Log.i("download", "onProgressUpdate: ");
        imageView.setColorFilter(R.color.imagecolor);
    }
}

和 onCreate() 方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    imageView = findViewById(R.id.imageView2);
    progressBar = findViewById(R.id.progressBar2);
    DownloadImage downloadImage = new DownloadImage();
    downloadImage.execute("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRaL6woz3RgMF-UXU682S_BYb1ayl5xaVancp0PPvF2HnCDmPsb");

    try {
        downloadImage.get();
    } catch (Exception e){

    }
}

标签: javaandroidandroid-asynctask

解决方案


我想显示下载图像的进度条并设置自定义颜色我在 onProgressUpdate() 中执行此操作,但它不起作用

您需要从 拨打publishProgress()电话doInBackground()。这将触发对onProgressUpdate(). 你没有这样做,所以onProgressUpdate()不会被调用。

它还会显示白屏,直到下载完成

删除你的downloadImage.get();电话。这将阻塞主应用程序线程,使用AsyncTask(或其更现代的替代品)的目的是不阻塞主应用程序线程。

如果我在下载过程中按返回按钮,它会崩溃。

如果活动/片段被销毁,则不应更新 UI。因此,您需要确认onPostExecute()更新 UI 是否安全(例如,调用isDestroyed()活动)。

除此之外,使用 Logcat 检查与任何 crash 相关的堆栈跟踪


推荐阅读