推荐阅读
cache bitmapmanage-memory
Bitmap.recycle()
android3.0之前,bitmap数据保存在native memory,Bitmap对象在gc被回收时,对应的native memory 被释放。所以存在jvm memory消耗很少,gc没有被触发,但native memory消耗很大。建议在图片不用时调用recycle()方法尽快回收Bitmap对象。android3.0及之后,bitmap数据保存在jvm内存中。
案例-Universal-Image-Loader
1 异步加载模型ThreadPoolExecutor 多线程处理 imageload-task结果通过ImageLoadInfo关联的handler(run in UI thread)处理
2 缓存处理DiskCacheLruMemoryCache
3 图片压缩处理BaseImageDecoder.decode()
4 ImageView销毁,图片重设处理通过WeakReference<View>跟踪ImageView被销毁的情况。public boolean isCollected() {return viewRef.get() == null;}通过维护Map<ViewId, CacheKey>,比较当前处理task的View对应的cachekey是否改变跟踪ImageView被重设图片的情况。LruMemoryCache: LinkedHashMap<String, Bitmap> map to save bitmap
静态结构![]()
图片加载流程序列![]()
案例-facebook_fresco
four different degrees of reference strength: strong, soft, weak, and phantom, in order from strongest to weakest.