其他分享
首页 > 其他分享> > Android图片视图会使应用变慢

Android图片视图会使应用变慢

作者:互联网

在我的应用程序中,我有一个ImageView.在添加该ImageView之前,该应用程序运行平稳.现在它会抛出ANR.

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

imageView.setImageBitmap(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();

encodedStrings [1]包含base64编码的图像dataUrl.

这个问题有什么解决办法吗?

解决方法:

让您的应用变慢的主要问题是WeakReference删除它,然后尝试

不要用这个

 private final WeakReference<ImageView> imageViewReference;

只是使用

private final ImageView imageViewReference;

标签:base64,android-asynctask,bitmap,imageview,android
来源: https://codeday.me/bug/20191120/2044584.html