Android DiskLruCache学习笔记
2015-12-25 16:05
501 查看
转载请注明出处:http://blog.csdn.net/ibelieveyouwxy/article/details/50403659
废话不多说,先上下载地址,在OKhttp里面封装了这个文件,如果用okhttp做数据请求的话,可以直接查看diskLruCache。DiskLruCache下载地址
-如果我们要创建一个DiskLruCache的实例,则需要调用它的open()方法
当然啦,我们可以封装一个manager类,来实现各个方法:
这是一个实现open的方法,在里面还包含了一个getDiskCacheDir方法,来获取缓存的地址和getAPPVersion方法来获取app版本:
获取缓存的地址,如果内存卡存在,调用getExternalCacheDir获取缓存位置
获取到位置为:/sdcard/Android/data//cache
内存卡不存在,调用getCacheDir获取位置
获取位置为:/data/data//cache
-存储缓存数据:
-取出存储的数据:
-移除某个缓存数据
封装方法如下:
根据返回的boolean值判断移除是否成功!
-获取缓存的总大小
前缓存路径下所有缓存数据的总字节数,以byte为单位,如果应用程序中需要在界面上显示当前缓存数据的总大小,就可以通过调用这个方法计算出来
-关闭缓存,这个方法跟open方法是对应的
关闭掉了之后就不能再调用DiskLruCache中任何操作缓存数据的方法,
通常只应该在Activity的onDestroy()方法中去调用close()方法。
-清除缓存功能
这个方法用于将所有的缓存数据全部删除,
手动清理缓存功能,这个入口一般在设置里面显示,是否清除缓存。
只需要调用一下DiskLruCache的delete()方法就可以实现了。
以上就是关于DiskLruCache的主要功能,写的不好,还望斧正!一起交流,共同进步。
下载DiskLruCacheManager 和DiskLruCache地址
最近无聊刷糗百,发现糗百在没有网络的情况下,还是可以看到上次退出时候的数据,于是想探究一下糗百的数据缓存是怎么做的,网上找了很多资料之后,发现了一个很棒的硬盘缓存方案。DiskLruCache ,一个Google推荐的缓存方案,虽然不是Google官方编写。
废话不多说,先上下载地址,在OKhttp里面封装了这个文件,如果用okhttp做数据请求的话,可以直接查看diskLruCache。DiskLruCache下载地址
-如果我们要创建一个DiskLruCache的实例,则需要调用它的open()方法
public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize)
* 第一个参数指定的是数据的缓存地址 * 第二个参数指定当前应用程序的版本号 * 第三个参数指定同一个key可以对应多少个缓存文件,基本都是传1 * 第四个参数指定最多可以缓存多少字节的数据
当然啦,我们可以封装一个manager类,来实现各个方法:
public synchronized boolean open(Context context, String uniqueName) { try { File cacheDir = getDiskCacheDir(context, uniqueName); if (!cacheDir.exists()) { cacheDir.mkdirs(); } cache = DiskLruCache.open(cacheDir, getAppVersion(context), valueCount, size); return true; } catch (IOException e) { e.printStackTrace(); } return false; }
这是一个实现open的方法,在里面还包含了一个getDiskCacheDir方法,来获取缓存的地址和getAPPVersion方法来获取app版本:
private File getDiskCacheDir(Context context, String uniqueName) { String cachePath; if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) { cachePath = context.getExternalCacheDir().getPath(); } else cachePath = context.getCacheDir().getPath(); return new File(cachePath + File.separator + uniqueName); } private int getAppVersion(Context context) { try { PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); return info.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return 1; }
获取缓存的地址,如果内存卡存在,调用getExternalCacheDir获取缓存位置
获取到位置为:/sdcard/Android/data//cache
内存卡不存在,调用getCacheDir获取位置
获取位置为:/data/data//cache
-存储缓存数据:
public Editor edit(String key)
/** * 存储一个obj对象 * * @param key * @param obj * @return */ public synchronized boolean put(String key, Object obj) { String json = gson.toJson(obj); DiskLruCache.Editor editor = null; try { editor = cache.edit(key); editor.set(0, json); editor.commit(); return true; } catch (IOException e) { e.printStackTrace(); } return false; } /** * 存储一个String对象 * * @param key * @param str * @return */ public synchronized boolean put(String key, String str) { DiskLruCache.Editor editor = null; try { editor = cache.edit(key); editor.set(0, str); editor.commit(); return true; } catch (IOException e) { e.printStackTrace(); } return false; }
-取出存储的数据:
public synchronized Snapshot get(String key)
/** * 取出缓存数据 * 取出的是Object对象 * * @param key * @param type * @param <T> * @return */ public synchronized <T> T get(String key, Type type) { try { String data = cache.get(key).getString(0); T o = gson.fromJson(data, type); return o; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 取出数据,非obj对象 * * @param key * @param <T> * @return */ public synchronized <T> T get(String key) { try { String data = cache.get(key).getString(0); T o = (T) data; return o; } catch (IOException e) { e.printStackTrace(); } return null; }
-移除某个缓存数据
public synchronized boolean remove(String key)
封装方法如下:
根据返回的boolean值判断移除是否成功!
public synchronized boolean remove(String key) { try { cache.remove(key); return true; } catch (IOException e) { e.printStackTrace(); } return false; }
-获取缓存的总大小
public synchronized long size()
前缓存路径下所有缓存数据的总字节数,以byte为单位,如果应用程序中需要在界面上显示当前缓存数据的总大小,就可以通过调用这个方法计算出来
public synchronized long getSize() { if (!cache.isClosed()) return cache.size(); return 9999; }
-关闭缓存,这个方法跟open方法是对应的
public synchronized void close()
关闭掉了之后就不能再调用DiskLruCache中任何操作缓存数据的方法,
通常只应该在Activity的onDestroy()方法中去调用close()方法。
public synchronized void close() { try { cache.close(); } catch (IOException e) { e.printStackTrace(); } }
-清除缓存功能
public void delete()
这个方法用于将所有的缓存数据全部删除,
手动清理缓存功能,这个入口一般在设置里面显示,是否清除缓存。
只需要调用一下DiskLruCache的delete()方法就可以实现了。
public synchronized void delete() { try { if (!cache.isClosed()) cache.delete(); } catch (IOException e) { e.printStackTrace(); } }
以上就是关于DiskLruCache的主要功能,写的不好,还望斧正!一起交流,共同进步。
下载DiskLruCacheManager 和DiskLruCache地址
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories