读Android开发艺术探索笔记(LruCache+DiskLruCache实现强大的图片加载)
2016-11-19 09:31
471 查看
LruCache用于实现内存缓存,DiskLruCache充当了存储设备缓存也就是存储到SD卡。
LruCache:
初始化LruCache:
private int maxMemory =
(int) (Runtime.getRuntime().maxMemory()
/ 1024);
private int cacheSize = maxMemory / 8;
private LruCache<String,
Bitmap> myCache = new LruCache<String,
Bitmap>(cacheSize) {
DiskLruCache:
DiskLruCache的open方法:用于创建DiskLruCache对象
DiskLruCache.open(diskCacheDir, 1, 1, DISK_CACHE_SIZE);
open()方法接收四个参数,第一个参数指定的是数据的缓存地址,第二个参数指定当前应用程序的版本号,第三个参数指定同一个key可以对应多少个缓存文件,基本都是传1,第四个参数指定最多可以缓存多少字节的数据
Snapshot:封装了从DiskLruCacge中获取的一个文件对象,可以从区获取文件的输入流,进而获得文件。
DiskLruCache.Snapshot snapshot = mDiskLruCache.get(key);
Editor:DiskLruCache的缓存的添加操作是通过Editor完成的,Editor表示一个缓存对象的编辑对象。
因为每个实体都是个文件,所以你可以认为这个os指向一个文件的FileOutputStream,然后把你想存的东西写入就行了,写完以后记得调用:
源码链接:点击打开链接
LruCache:
初始化LruCache:
private int maxMemory =
(int) (Runtime.getRuntime().maxMemory()
/ 1024);
private int cacheSize = maxMemory / 8;
private LruCache<String,
Bitmap> myCache = new LruCache<String,
Bitmap>(cacheSize) {
@Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } //源码中该方法是一个空实现,可以在此做一些对象回收工作 @Override protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { } };
将Bitmap存储缓存中:
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
if (getBitmapFromMemoryCache(key) == null) { myCache.put(key, bitmap); } }
从缓存中获取Bitmap对象:
public Bitmap getBitmapFromMemoryCache(String key) {
return myCache.get(key); }
DiskLruCache:
DiskLruCache的open方法:用于创建DiskLruCache对象
DiskLruCache.open(diskCacheDir, 1, 1, DISK_CACHE_SIZE);
open()方法接收四个参数,第一个参数指定的是数据的缓存地址,第二个参数指定当前应用程序的版本号,第三个参数指定同一个key可以对应多少个缓存文件,基本都是传1,第四个参数指定最多可以缓存多少字节的数据
Snapshot:封装了从DiskLruCacge中获取的一个文件对象,可以从区获取文件的输入流,进而获得文件。
DiskLruCache.Snapshot snapshot = mDiskLruCache.get(key);
if (snapshot != null) { FileInputStream fileInputStream = (FileInputStream) snapshot.getInputStream(DISK_CACHE_INDEX); FileDescriptor fileDescriptor = fileInputStream.getFD(); Bitmap bitmap = BitmapUtil.decodeSampledBitmapFromFileDescriptor(fileDescriptor, reqWidth, reqHeight);
Editor:DiskLruCache的缓存的添加操作是通过Editor完成的,Editor表示一个缓存对象的编辑对象。
因为每个实体都是个文件,所以你可以认为这个os指向一个文件的FileOutputStream,然后把你想存的东西写入就行了,写完以后记得调用:
editor.commit()。
源码链接:点击打开链接
相关文章推荐
- 利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记
- 读书笔记-Android开发艺术探索-第12章-Bitmap的加载和Cache
- 利用LruCache和DiskLruCache加载网络图片实现图片瀑布流效果(升级版)
- Android异步加载学习笔记之二:实现ListView中的图片数据从网络加载
- Activity在异常情况下的生命周期——Android开发艺术探索笔记
- Android开发艺术探索------Bitmap的高效加载
- View的滑动冲突解决-android开发艺术探索笔记
- Android_开发 Gallery实现异步加载网络图片 并只加载当前停止页面图
- Android开发艺术探索学习笔记(六)
- 任玉刚【Android开发艺术探索】读后笔记三
- Android 加载图片优化(二) LruCache DiskLruCache
- 任玉刚【Android开发艺术探索】读后笔记一
- Android:漫画APP开发笔记之从WAP网站解析图片地址并加载图片
- Android开发艺术探索(研读笔记)——02-Activity的启动模式
- 【Android开发笔记】pulltorefresh实现下拉刷新和上拉加载更多
- Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计
- Android性能优化之实现双缓存的图片异步加载工具(LruCache+SoftReference) - 拿来即用
- android开发小技巧:实现listview异步加载图片
- Android开发之图片处理专题(三):利用ThreadPoolExcutor线程池实现多图片的异步加载
- Android中实现图片的异步加载学习笔记