查看原文
其他

Android 图片的三级缓存 及 图片压缩

2017-03-14 杨守乐

为什么需要图片缓存

默认给每个应用只分配16M的内存,所以如果加载过多的图片,为了防止内存溢出,应该将图片缓存起来。图片的三级缓存分别是:

  1. 内存缓存

  2. 本地缓存

  3. 网络缓存

其中,内存缓存应优先加载,它速度最快;本地缓存次优先加载,它速度也快;网络缓存不应该优先加载,它走网络,速度慢且耗流量。

三级缓存的具体实现

网络缓存

  • 根据图片的url去加载图片

  • 在本地和内存中缓存

本地缓存

  • 两个方法:设置本地缓存,获取本地缓存

内存缓存

  • 两个方法:设置内存缓存,获取内存缓存

  • 问题: 

  1. 如果使用HashMap存储图片时,当图片越来越多时,会导致内存溢出,因为它是强引用,java的垃圾回收器不会回收。

  2. 如若改成软引用SoftReference(内存不够时,垃圾回收器会考虑回收),仍有一个问题:在android2.3+, 系统会优先将SoftReference的对象提前回收掉, 即使内存够用。

  • 解决办法:可以用LruCache来解决上述内存不回收或提前回收的问题。least recentlly use 最少最近使用算法 它会将内存控制在一定的大小内, 超出最大值时会自动回收, 这个最大值开发者自己定

  • 图片压缩

    看完本文有收获?请转发分享给更多人

    关注「技术联盟之巅」,提升编程技能

    每当我看到你的点赞、评论、或打赏都会感觉特别激动和高兴,真希望正如你看我的文章一样。我们共同努力。如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。

    赞助方式如下链接:

    http://blog.csdn.net/xiaole0313/article/details/52333666


    如果您觉得不错,请别忘了分享到您的朋友圈让更多的人看到!! 您的举手之劳,就是对我最好的支持,非常感谢!

    版权声明:【我们尊重原创。此篇干货,版权属于原作者。部分文章推送时因种种原因未能与原作者联系上,若涉及版权问题,敬请原作者联系我们,立即处理。】

    本文由吧主分享:http://blog.csdn.net/xiaole0313

    推荐文章:

    1分钟看懂‘萨德’究竟是什么鬼

    我想你了

    如果你喜欢上了一个程序员小伙,献给所有的程序员女友

    http://blog.csdn.net/xiaole0313/article/details/47727741


    【技术群】279126311 [满]

    【技术群】484572225 [未]

    如果你有好的文章想和大家分享,欢迎投稿,直接向我投递文章链接即可。投稿邮箱:ysle0313@gmail.com

    欢迎扫描关注我们的微信公众号(ysle_0313),不要错过每一篇干货~

    一键关注我们微信公众号 ysle_0313

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存