我使用的是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
是否仍然存在。感谢。
答案 0 :(得分:4)
不,您不应该imageViewReference
检查null
,您应该使用{{的返回值null
仅检查ImageView
覆盖的内容 - get
1}}方法。
答案 1 :(得分:1)
John你是对的,没有必要这样做。