前言Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求今天,我将为大家带来 Rxjava中的常见开发应用场景:从磁盘、内存缓存中获取缓
1.简介 现在android应用中不可避免的要使用图片,有些图片是可以变化的,需要每次启动时从网络拉取,这种场景在有广告位的应用以及纯图片应用(比如百度美拍)中比较多。现在有一个问题:假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响。当然,我想,向百度美拍这样的应用,必然也有其内部的图片缓存策略。总之,图片缓存是很重要而且是必须的。 2.图片缓存的原理 实现图片缓存也不难,需要有相应的cache策略。这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引
在资讯类应用中为了优化用户体验,一般会使用缓存数据。以下代码就是使用rxjava 同时获取网络和缓存数据。网络数据可以覆盖缓存数据,缓存数据无法覆盖网络数据。网络出错不会影响缓存的显示,缓存出错不会影响网络的显示。两则同时出错,则会显示网络错误。使用的时候也很简单。只需要一行代码。
RxDataUtil.getData(net, cache)
和网上已有的方法相比,这个方法更好理解。没用特别复杂的操作符。而且没用bug。
下面这篇文章中如果网络和缓存都出错,下游将接受不到事件,界面会一直处于load
先前有写过基于Rxjava+Retrofit获取网络数据,有时数据源来自本地数据库,读写数据库也是耗时操作。既然mvp+Rxjava的封装适用于网络数据,是否适用于数据库的操作呢? 这几天也查看了相关的资料,没有看到一针见血的文章。细细看来,其实也很简单。只需要改一行代码就可以搞定!
Retrofit的封装过程可以参考先前的文章:安卓框架搭建之MVP+Retrofit+RxJava基础:,这里先
//会首先从缓存中获取结果,其次数据库,然后网络
Observable.concat(getFromCache(), getFromDB(), getFromNet())
.firstElement() //注意是取第一个返回的结果,不是第一个方法的结果
.toObse...
关于缓存
用户角度:
做客户端,大部分时候都在追求良好的用户体验,缓存,就要达到一个缓兵之计的效果。因为用户永远是“暴躁”的,页面加载要是有缓存先展示出来,用户就会安心很多。这是一种视觉上的舒服,大多数用户并不在乎这个数据从哪来。
开发者角度:
对于客户端程序来说,网络状况是未知而不稳定的,在耗时上面,一次网络请求可能大于本地数据读取好几个数量级。并且,某些及时性不高的数据,并不需要每次都从服务端...
int cacheSize = 10 * 1024 * 1024; // 10 MiB
final String CACHE_PATH
= Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/okcache";
File cacheDirectory = new F...
Retrofit + rxJava实现三级缓存前言平时加载数据的时候,大多都用到缓存,即取数据的顺序为:内存->硬盘->网络。rxJava实现三级缓存的需求主要用到两个操作符:concat和first.concatconcat同名的方法有很多,由于是实现三级缓存,所以这里使用的是3个参数的concat。先来看官方说明:
Returns an Observable that emits the i