我在我的应用程序中有一个ImageView
。在添加这个ImageView
之前,应用程序运行顺畅。现在它抛出ANR错误。
图像以base64编码字符串的形式保存在数据库中,并使用以下方式解码为位图并加载到imageview中:
imageView.setImageBitmap(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);
}
}
}
}
AsyncTask
是通过以下代码从主UI中调用的:BitmapWorkerTask task = new BitmapWorkerTask(pollWebView,decodedStrings[1]);
task.execute();
decodedStrings[1] 包含了base64编码的图片数据URL。
有没有解决这个问题的方法?