[英]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
仍然存在。 谢谢。
不,你不应该检查imageViewReference
为null
,你应该检查null
只是它所涵盖- ImageView
使用的返回值get
方法。
约翰,您是正确的,没有必要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.