如何在AsyncTask中回收位图? Android的

时间:2013-06-19 19:46:21

标签: android bitmap android-asynctask recycle

我正在编写一个小型Android应用程序,它使用asyncTask来显示来自Web服务的图像。代码有效,但我注意到我应该回收这个位图。

我的问题是,有没有办法在我使用它之后回收这个位图?

我尝试使用onStop()解决方案,并且位图没有被回收或图像根本不会显示。

这是我的OnCreate

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Other unrelated things
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        imageUrl = bundle.getString("imageUrl");
        displayImage();
    }

这是我的AsyncTask

private void displayImage() {
        new AsyncTask<String, Void, Bitmap>() {
            protected Bitmap doInBackground(String... params) {
                try {
                    return loadBitmap(params[0]);
                } catch (Exception e) {
                    Logger.e(TAG, getString(R.string.error_loading_image_bitmap));
                    return null;
                }
            }

            protected Bitmap loadBitmap(String urlSpec) throws IOException {
                InputStream is = new URL(urlSpec).openStream();
                try {
                    return BitmapFactory.decodeStream(is);
                } finally {
                    is.close();
                } 
            }

            protected void onPostExecute(Bitmap bitmap) {
                if (bitmap != null) {
                    ImageView invoiceItemImageView = (ImageView) findViewById(R.id.some_id_here);
                    invoiceItemImageView.setImageBitmap(bitmap);

                }

            }

        }.execute(imageUrl);

    }

1 个答案:

答案 0 :(得分:2)

覆盖方法View.onDetachedFromWindow()并在那里回收Bitmap