ImageView在后续活动启动时清空

时间:2016-04-17 18:48:48

标签: android android-asynctask imageview

我正在使用此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,这最终会导致内存不足异常。所以,我想知道:基于我正在使用的代码块,活动是否因onPause()上的某些原因回收/清空了我的ImageView?

2 个答案:

答案 0 :(得分:0)

试试这个!!!!

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

ImageView bmImage;
Bitmap mIcon11;

public DownloadImageTask(ImageView bmImage) {
    this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {


    try {
            mIcon11 = BitmapFactory.decodeStream((InputStream) new URL(urls[0]).getContent());

        } catch (Exception e) {
            e.printStackTrace();
        }
    return mIcon11;
}

protected void onPostExecute(Bitmap result) {
    if (result != null) {
            bmImage.setImageBitmap(result);

        } else {

            Toast.makeText(TestActivity.this, "Image Does Not exist or Network Error", Toast.LENGTH_SHORT).show();

        }
}
} 

答案 1 :(得分:0)

每当您的应用程序到达前台时,都会调用onResume()并再次生成视图,因此可能是null值的原因。 你可以使用onResume()。 (有关更多信息,请查看活动生命周期) 另外,根据其他人的建议,您可以使用Picasso或Universal Image Loader或其他库轻松实现。 首先,您可以参考以下链接:

https://www.simplifiedcoding.net/picasso-android-tutorial-picasso-image-loader-library/ http://javatechig.com/android/how-to-use-picasso-library-in-android http://javatechig.com/android/universal-image-loader-library-in-android