Я использую этот 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);
}
}
Я заметил, что всякий раз, когда я запускаю свое приложение в фоновом режиме и перезапускаю активность, ImageViews очищаются. Различные проверки ImageViews показывают, что они равны нулю в onCreate()
, и поэтому, если я хочу снова показать изображения, мне нужно снова вызвать AsyncTask, что в конечном итоге приводит к исключениям нехватки памяти. Итак, мне интересно: по каким-то причинам активность перерабатывает/очищает мои ImageViews на onPause()
на основе того блока кода, который я использую?