神刀安全网

AutoCache高性能缓存框架使用教程

AutoCache高性能缓存框架使用教程
一只正在设计AutoCache的攻城狮

读者可能会问在下:

  1. 为什么要使用AutoCache?
    简洁、高性能。
  2. 现在市面上有那么多缓存的框架,像piccso等都很优秀,那笔者是不是在重复造车?
    AutoCache是为那些追求轻量级缓存的APP而生的。目的是让开发者既能快速完成APP缓存功能的开发,又能保证上线后性能的稳定。

AutoCache 能够让你高效地编写app缓存代码 ,保证你的数据流被安全、准确地存储到SDcard私有目录。参考下列核心调用代码来开始你的 AutoCache 之旅:

AutoCache.MediaCache.getInstance(context).asyncCache("url", new CallBack() {             @Override             public void onStart() {                 //Run in UI thread.             }              @Override             public void save2DataBase(String cachePath) {                 //Run in io thread,                 //You can sava the  cachPath to database or sharepreference.             }              @Override             public void onSuccess(byte[] bytes) {                 //Run in UI thread.              }              @Override             public void onErro(Throwable e) {                 //Run in UI thread.             }         }, FILE_TYPE, "filename");

集成方法

在Module的build.gradle文件中添加如下依赖即可。

compile 'com.txm.topcodes.autocache:autocache:0.1.2'

调用方式

为方便开发者,AutoCache提供统一调用入口,调用方式十分简洁。下面先给大家看一张思维导图,该图罗列了框架的主体功能及其构成。

AutoCache高性能缓存框架使用教程
AutoCache功能结构图

从结构图不难看出,AutoCache类就是调用框架的入口类。当我们需要从本地获取流文件时,调用方式是这样的

AutoCache.Media.get…();

缓存网络文件时,调用方式是这样的

AutoCache.MediaCache.getInstance(context).asyncCache();

缓存本地已有文件时,调用方式是这样的

AutoCache.MediaCache.getInstance(context).cache();

当需要指定文件文件类型时,使用方式是这样的

AutoCache.DIRECTORY_PICTURES

「如需获取详细信息,请在 GitHub 的 auto-cache页面查看源代码.」

文件类型

AutoCache支持缓存以下泛媒体类型:Podcasts,Pictures,Movies,Music,Documents,Download。其中Download比较特殊,用它可以指定未知的文件类型。

使用场景

当我们的APP从网络获取文件流时,往往会有这样的需求「也可能是其中之一」:

  1. 网络请求时,要可以自动将文件保存到APP本地。
  2. 网络请求时,将网络图片的本地路径存储到SQLite或其它数据持久化中,以方便逻辑处理。
  3. 网络请求时,直接使用从网络获取到文件流。
  4. 网络请求时,方便添加进度条功能。
  5. 网络请求时,全局捕获异常。
  6. 本次请求之后,根据文件名、文件类型从本地获取文件流。
AutoCache高性能缓存框架使用教程

对于需求1。AutoCache完全是在后台IO线程中完成的,不需要调用者主动去操作。

IO线程:I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io线程比Thread线程更有效率。

对于需求2。save2DataBase(String cachePath)回调方法自动就被指定在IO线程中运行。「所以,save2DataBase既是一个非阻塞的方法,又具备IO线程的高效性。」

对于需求3。onSuccess(byte[] bytes)回调方法被指定自动运行在UI线程中。

对于需求4。AutoCache提供了onstart()回调方法作为调用开始的标志,onSuccess(byte[] bytes)或onErro(Throwable e)作为调用结束点。

对于需求5。全局捕获异常指的是:onErro(Throwable e)不仅可以捕获网络异常、本地缓存媒体时发生的异常,而且还可以捕获发生在onStart、save2DataBase、onSuccess中的异常。

对于需求6。AutoCache.Media类提供了4种同步方式来获取本地的媒体流。

最佳实践


防止OOM

AutoCache.Media类中提供了getSoftBmp(~),getWeakBmp(~),getBmp(~),getFile(~)四种方式来获取流。如果是图片文件,笔者建议使用前两种方式,具体可参考善于利用软引用和弱引用。

定制回调方法

AutoCache框架提供了CallBackAdapter接口用于替换CallBack接口。可以通过它实现自由定制自己需要的回调方法。「这样是为了代码看上去简洁。」

AutoCache.MediaCache.getInstance(context).asyncCache("url", new CallBackAdapter() {             @Override             public void save2DataBase(String cachePath) {              }             @Override             public void onSuccess(byte[] bytes) {              }             //you can add other callback function here.         },FILE_TYPE,"filename");

FAQ


我发现AutoCache还存在BUG?
AutoCache是一个完全开源的框架,如果您在使用过程中发现问题,请在GitHub创建一个问题。

我是Eclipse用户,可以使用AutoCache么?
不可以。

AutoCache用到了哪些第三方框架?
是的。AutoCache是在RXjava+Okhttp基础之上封装的一个轻量级缓存框架。

AutoCache提供缓存文件路径到SQLite数据库的方法了吗?
没有。AutoCache缓存的重心是将流文件缓存到本地目录。如果需要将文件路径缓存到SQLite或其他持久化数据层中,开发者需要自行在save2DataBase(cachePath)回调方法中实现逻辑。

我在android studio中链接AutoCache库失败了?
确保您的工程使用的远程仓库为jcenter。

allprojects {     repositories {         jcenter()     } }

————–我是一条萌萌哒的分割线,表示教程结束—————-

AutoCache高性能缓存框架使用教程

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » AutoCache高性能缓存框架使用教程

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址