android图片处理

来源:互联网 发布:苹果5移动4g网络怎么开 编辑:程序博客网 时间:2024/05/22 00:31
 推荐阅读
cache bitmap
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
manage-memory
http://developer.android.com/training/displaying-bitmaps/manage-memory.html

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
https://github.com/nostra13/Android-Universal-Image-Loader

1 异步加载模型
 ThreadPoolExecutor 多线程处理 imageload-task
 结果通过ImageLoadInfo关联的handler(run in UI thread)处理

2 缓存处理
DiskCache
LruMemoryCache


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

    https://github.com/facebook/fresco



four different degrees of reference strength: strong, soft, weak, and phantom, in order from strongest to weakest.
https://weblogs.java.net/blog/2006/05/04/understanding-weak-references
0 0
原创粉丝点击