Android --- 内存中记录位图(图片三级缓存实现)
来源:互联网 发布:c语言编译器手机版 编辑:程序博客网 时间:2024/06/14 10:18
前言:
这里说的三级缓存,分别指的是:内存缓存、文件缓存和网络这三个层面。
一般来说,我们首次加载图片,内存和文件是没有缓存的,这样我们需要从网络加载,加载完成后,我们会存到内存和文件中去;当再次加载图片的时候,我们会先查找内存有没有,如果有就直接显示内存中的图片,如果没有,我们会接着查找文件中是否有,如果文件中有,我们会显示文件中的图片,并且把它存到内存中去,这样下次我们在内存中就能找到它了。
我们之所以要做缓存,主要是为了提高效率,节省流量。但是为什么要做三级呢?为什么不只存在内存或者只存在文件中呢?这是因为内存的读取速度快,但是容易被回收,容量小,文件的读取速度次之,不过容量大,不到不得已不会被回收。
有了以上的介绍,我们已经知道了三级缓存的必要性和实施步骤,接下来,我们就要选择在每级缓存的缓存策略了。
内存缓存,最开始大家推崇的是用SoftRefrence(软引用),它只有在内存不够的情况下才会被GC回收。但是高版本的安卓系统更倾向于回收SoftRefrence,这使得SoftRefrence不那么好用了。不过,安卓在3.0之后提供了LRUCache,它采用了最近最少使用的淘汰策略。本篇文章我们的内存缓存使用的就是LruCache.
文件缓存,我们使用的是DiskLruCache 点击这里下载
内存中记录位图
LruCache<String, Bitmap> cache ;// 初始化方式// 获取系统的分配给应用的最大空间 ( 取 1/8 来作为缓存最大空间 )int maxSize = (int) (Runtime.getRuntime().maxMemory() / 8);cache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap value) { // value.getRowBytes() 表示位图每一行占据的空间大小 return value.getRowBytes() * value.getHeight(); }};// 取出内容:Bitmap b = cache.get(key);// 存储:cache.put(key, bitmap);
获取应用缓存路径
localCachePath = context.getExternalCacheDir().toString();如:应用包名为 com.xykj.weibo对应的路径为 /mnt/sdcard/Android/data/com.xykj.weibo/cache
阅读全文
0 0
- Android --- 内存中记录位图(图片三级缓存实现)
- android 图片三级缓存实现
- Android中图片的三级缓存(内存、文件、网络)
- Android图片三级缓存(内存,SD)
- 简单实现Android图片三级缓存机制
- 简单实现Android图片三级缓存机制
- Android中图片的三级缓存
- Android中图片的三级缓存机制
- Android中图片的三级缓存
- Android中图片的三级缓存策略
- Android开发中图片的三级缓存
- Android中图片的三级缓存
- Android开发中图片的三级缓存
- Android中图片的三级缓存策略
- Android中图片的三级缓存详解
- Android中图片的三级缓存
- Android中图片的三级缓存
- Android中图片的三级缓存
- Jamming with Ubuntu 2017——用开源技术打造物联网应用
- CXF--整合Spring
- boost asio 分析1
- 模拟实现容器List(迭代器)
- ListView中的getChildAt的注意事项
- Android --- 内存中记录位图(图片三级缓存实现)
- 这是本年度最“感性”手机——对新发布的三星 Galaxy Note 8,你是否还“敢爱” ?
- 马斯克在 Instagram 大秀 SpaceX 宇航服,满满科幻感
- Struts2 登录界面
- 万中选一,北京升哲科技荣获首个物联网行业 IDEA 金奖
- 四维图新联手铂骏科技,推出充电网络地图
- 苹果自动驾驶遭遇挫折,转而开发园区穿梭大巴
- 阿里云开放华北5,继续加注云市场投入
- “化反”原创者阿木卸任乐视一切职务 贾跃亭战队即将解散