在我的应用中,我有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();
decodingStrings [1]包含base64编码图像dataUrl。
针对此问题的任何解决方案?
答案 0 :(得分:3)
让你的应用程序变慢的主要问题是WeakReference删除它并尝试不用那个
请勿使用此
private final WeakReference<ImageView> imageViewReference;
只需使用
private final ImageView imageViewReference;
答案 1 :(得分:0)
使用以下代码压缩图像( 75%压缩)
viewDidLayoutSubviews()