0

我正在编写一个小型 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);

    }
4

1 回答 1

2

覆盖方法View.onDetachedFromWindow()并回收你的Bitmap那里。

于 2013-06-19T21:05:19.637 回答