主要涉及几个要点:
- 要使用离线缓存的页面网络请求方式必须要用GET(POST不可以),其他不要的页面还是用POST
- 在添加拦截器时,需要添加网络拦截器(
)和应用拦截器(.addNetworkInterceptor(new NetInterceptor()) //有网情况下,一分钟内每次请求都会重新请求,不会走缓存
)。如果addNetworkInterceptor和addInterceptor添加的是同一个拦截器(包含了有网、无网络的逻辑处理),与把他们分开处理是不同的;使用同一个拦截器时,每次都会拦截两次,性能降低。.addInterceptor(new NoNetInterceptor()) //无网络的情况下:使用缓存,并且缓存的有效期为1天
- 不同的页面对应着不同URL,并且这个URL必须是固定的,因为获取缓存的时候都是根据这个唯一的URL区分的,否则会找不到相应的缓存数据。
俗语解释:
- 有网的情况下,我们依然可以设置:第一次请求数据成功,缓存成功后,在之后的1分钟内,再次请求会直接从缓存获取数据而不是重新网络请求;1分钟之后,不管有无缓存,都会重新网络请求数据。
max-age=60(1分钟)
- 无网的情况下,可以使用强制从缓存获取数据
CacheControl.FORCE_CACHE
- 无网络、有缓存的情况下,怎么控制不在使用缓存数据了呢??可以使用
max-stale=60*60(1小时),1小时之后缓存就失效了