【发布时间】:2016-04-18 22:08:23
【问题描述】:
我正在使用此 AsyncTask 从 URL 加载图像并使用该图像填充 ImageView:
new DownloadImageTask((ImageView) findViewById(R.id.headerIV)).execute(imageURL);
和
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
我注意到,每当我在后台运行应用程序并重新启动 Activity 时,ImageView 都会被清空。对 ImageViews 的各种检查表明它们在 onCreate() 中为空,因此如果我想再次显示图像,我必须再次调用 AsyncTask,这最终会导致内存不足异常。所以,我想知道:该活动是否基于我正在使用的代码块在onPause() 上因某些原因回收/清空我的 ImageViews?
【问题讨论】:
-
您需要了解活动生命周期。您最好使用 Glide、Picasso 等图像加载库来为您加载。
-
你应该使用 Picasso 从 url 下载图片
标签: android android-asynctask imageview