Android ImageView 使应用变慢

标签 android bitmap android-asynctask imageview base64

在我的应用程序中,我有一个 ImageView。在添加 ImageView 之前,应用程序运行流畅。现在它抛出 ANR

图像以 base 64 编码字符串的形式保存在数据库中,解码为位图并加载到 imageview 使用:

imageView.setImageBitmap(bitmap);

bitmap 的转换和将 bitmap 应用到 ImageView 所有这些事情都是在 AsyncTask 中完成的:

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private String data = "";

    public BitmapWorkerTask(ImageView imageView, String data) {
        imageViewReference = new WeakReference<ImageView>(imageView);
        this.data = data;
    }


    @Override
    protected Bitmap doInBackground(Integer... params) {

        byte[] decodedString = Base64.decode(data, Base64.DEFAULT);
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inPurgeable = true;
        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length, options);

        return decodedByte;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

使用以下代码从主 ui 调用 AsyncTask:

BitmapWorkerTask task = new BitmapWorkerTask(pollWebView,decodedStrings[1]);
                task.execute();

decodedStrings[1] 包含 base64 编码的图像 dataUrl。

这个问题有什么解决方案吗?

最佳答案

让您的应用变慢的主要问题是 WeakReference 删除它并尝试不使用它

不要用这个

 private final WeakReference<ImageView> imageViewReference;

只是使用

private final ImageView imageViewReference;

关于Android ImageView 使应用变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485377/

相关文章:

android - 在android中有Hue时查找颜色名称

android - RxJava : Executing an AsyncTask from Subscribe() fails

java - Android - 使用查询提示使整个搜索 View 可点击

c# - Bitmap.Save 保存一个图标实际上保存了一个.png

java - 属性“rippleColor”已被定义

android - java.lang.IllegalStateException : unable to getPixels(), Config#HARDWARE 位图不支持像素访问

android - 在后台线程中工作,停止 UI 线程

android - okhttp3 如何从异步 GET 调用返回值

java - 从列表 Activity 中删除 ContentView

android - Async 是否执行 block ui 线程?