Skip to content
forked from z-chu/RxCache

简单一步,缓存搞定。这是一个专用于RxJava,解决Android中网络请求的缓存处理框架。

License

Notifications You must be signed in to change notification settings

findvoid/RxCache

 
 

Repository files navigation

RxCache

Download

简单一步,缓存搞定。这是一个专用于RxJava,解决Android中网络请求的缓存处理框架。

screenshot

特性

缓存层级

  • 网络
  • 磁盘缓存 - DiskLruCache
  • 内存缓存 - LruCache

缓存策略-尽可能适应多种使用场景

  • 仅缓存
  • 仅网络
  • 仅网络依然会缓存
  • 优先缓存
  • 优先网络
  • 先缓存后网络

缓存置换算法

  • 最久未使用算法(LRU):最久没有访问的内容作为替换对象

存储策略 - 支持不同数据的缓存需求

  • 不存储
  • 仅内存
  • 仅磁盘
  • 内存+磁盘

引入

  • RxJava 2.0
dependencies {
	compile 'com.zchu:rxcache:2.0.3'
}
  • RxJava 1.0
dependencies {
	compile 'com.zchu:rxcache:1.2.4'
}

如何使用

准备RxCache,可以用单例模式创建一个全局的RxCache

rxCache = new RxCache.Builder()
                .appVersion(1)
                .diskDir(new File(getCacheDir().getPath() + File.separator + "data-cache"))
                .diskConverter(new SerializableDiskConverter())//支持Serializable、Json(GsonDiskConverter)
                .memoryMax(2*1024*1024)
                .diskMax(20*1024*1024)
                .build();

在原有代码的基础上,仅需一行代码搞定,一步到位!!!

.compose(rxCache.<~>transformer"custom_key", CacheStrategy.firstRemote()))

在这里声明缓存策略即可,不影响原有代码结构

调用示例:

gankApi.getHistoryGank(1)
                .compose(rxCache.<GankBean>transformer("custom_key", GankBean.class,strategy))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<CacheResult<GankBean>>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                        tvData.setText(e.getMessage());
                    }

                    @Override
                    public void onNext(CacheResult<GankBean> gankBeanCacheResult) {
                        Logger.e(gankBeanCacheResult);
                        if (gankBeanCacheResult.getFrom() == ResultFrom.Cache) {
                            tvData.setText("来自缓存:\n" + gankBeanCacheResult.toString());
                        } else {
                            tvData.setText("来自网络:\n" + gankBeanCacheResult.toString());
                        }

                    }
                });

泛型:

 gankApi.getHistoryGank(1)
                .map(new Function<GankBean, List<GankBean.ResultsBean>>() {
                    @Override
                    public List<GankBean.ResultsBean> apply(@NonNull GankBean gankBean) throws Exception {
                        return gankBean.getResults();
                    }
                })
                .compose(rxCache.<List<GankBean.ResultsBean>>transformer("custom_key", new TypeToken<List<GankBean.ResultsBean>>() {}.getType(), strategy))
		...

About

简单一步,缓存搞定。这是一个专用于RxJava,解决Android中网络请求的缓存处理框架。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%