我是否需要检查AsyncTask中的WeakReference?

时间:2015-03-14 20:06:51

标签: android android-asynctask weak-references

我使用的是Android开发者文档中的以下模式:

class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private int data = 0;

    public BitmapWorkerTask(ImageView imageView) {
        // Use a WeakReference to ensure the ImageView can be garbage collected
        imageViewReference = new WeakReference<ImageView>(imageView);
    }

    // Decode image in background.
    @Override
    protected Bitmap doInBackground(Integer... params) {
        data = params[0];
        return decodeSampledBitmapFromResource(getResources(), data, 100, 100));
    }

    // Once complete, see if ImageView is still around and set bitmap.
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

我的问题是:为什么我们需要在imageViewReference开头检查onPostExecute()是否为空?由于它在构造函数中被赋值,因此此时它不应该为null。我确实理解验证get()调用的返回,以验证基础ImageView是否仍然存在。感谢。

2 个答案:

答案 0 :(得分:4)

不,您不应该imageViewReference检查null,您应该使用{{的返回值null仅检查ImageView覆盖的内容 - get 1}}方法。

答案 1 :(得分:1)

John你是对的,没有必要这样做。