尝试实现小型内存缓存Drawables时,我了解到在关闭活动后避免内存泄漏需要解绑这些Drawables:将它们的回调设置为null。
因为在每个活动中维护缓存在内存中的Drawables需要额外的代码,所以我尝试在setImageDrawable(drawable)
之后立即解绑它们,至今没有看到任何影响。
这是MyImageView类的代码(extends ImageView
):
setImageDrawable(drawable);
d.setCallback(null);
在调试器中,我可以清楚地看到在第一行代码之前回调为null,在第一行代码之后,它被设置为此imageView,然后我又将其设置为null。之后它通常会显示。
setCallback(Drawable.Callback cb)
的文档说明如下:
将一个Drawable.Callback对象绑定到此Drawable上。对于希望支持动画Drawable的客户端是必需的。
既然我不需要动画Drawable,我看不出为什么我不应该这样做,但是在有关Android中关于Drawable的内存泄漏的几个博客中,这只是在活动结束后才执行的。问题是,为什么当绑定到ImageView
时,回调总是自动设置?
在那些将回调设置为null的Drawable中是否存在某些边界条件会导致问题?比如无法显示或NPE错误?