我在http://developer.android.com/training/displaying-bitmaps/process-bitmap.html上浏览了这个资源,讨论了如何异步采样图像并将其加载到图像视图中。
我的眼睛抓住了以下代码
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
这个asynctask的构造函数是
public BitmapWorkerTask(ImageView imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<ImageView>(imageView);
}
我无法理解为什么onPostExecute
中存在此检查 if (imageViewReference != null && bitmap != null)
我们刚刚在构造函数中初始化了弱引用。为什么我们必须对它进行可空性检查。 ?
这是100%准确
if (imageView != null)
我们永远不知道imageview是否被垃圾收集,但是有没有条件导致WeakReference类ITSELF被垃圾收集?
答案 0 :(得分:2)
一般来说,我会说不,这不可能发生,所以它看起来似乎是多余的,但是再一次检查并没有真正损害性能,并且可以防止一些奇怪的崩溃。
我个人总是将我的WeakReferences声明为最终确定。