【发布时间】:2015-04-07 06:41:45
【问题描述】:
在我的应用程序中,我有一个 ImageView。在添加 ImageView 之前,该应用程序运行流畅。现在它会抛出 ANR。
图像以 base 64 编码字符串保存在数据库中,并被解码为位图并使用以下方法加载到图像视图:
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。
有解决这个问题的办法吗?
【问题讨论】:
-
位图的大小是多少?
-
它可以从 10 kb 到 10 mb 不等
标签: android bitmap android-asynctask imageview base64