繁体   English   中英

我需要检查AsyncTask中的WeakReference吗?

[英]Do I need to check a WeakReference inside an AsyncTask?

我正在使用以下来自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仍然存在。 谢谢。

不,你不应该检查imageViewReferencenull ,你应该检查null只是它所涵盖- ImageView使用的返回值get方法。

约翰,您是正确的,没有必要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM