android OKHTTP 的缓存问题


了解OKHTTP的缓存 可有助于我们使用retrofit picasso 等配合okhttp使用的框架。

okhttp中的缓存主要要在两个地方配置:

第一,在构造okhttpclient时 设置缓存路径

第二,在构造request时 配置缓存策略


一、缓存路径

OkHttpClient client = new OkHttpClient.Builder()  
                .connectTimeout(5, TimeUnit.SECONDS)  
                .cache(new Cache(new File(this.getExternalCacheDir(), "okhttpcache"), 10 * 1024 * 1024))  
                .build(); 
从方法.cache ()可知,我们设置的应用路径为“ ~/mnt/sdcard/Android/data/应用包名/cache/okhttpcache”  最大缓存容量是10M 超过10M时会自动删除已缓存的数据。当没有网络连接时,会自动加载缓存中的数据。很方便。

发起网络请求 如下:

Request request = new Request.Builder().url("http://www.tngou.net/api/food/list?id=1").build();  
client.newCall(request).enqueue(new Callback() {  
    @Override  
    public void onFailure(Call call, IOException e) {  
  
    }  
  
    @Override  
    public void onResponse(Call call, Response response) throws IOException {  
        if (response.isSuccessful()) {  
                   *********
        }  
    }  
});  
网络请求完后 可以在前面设置的目录下看到三个文件,如图

其中以.0结尾的文件缓存了http的响应头信息,以.1结尾的文件则缓存了我们下载的json数据,journal则是一个日志文件

这个时候如果关闭网络再去请求网络数据,就会直接从缓存中读取数据了。

二、缓存策略

配置缓存策略就是在构造request时,设置CacheControl, CacheControl有两种配置方式:

第一:构造CacheControl

CacheControl cc = new CacheControl.Builder()  
                //不使用缓存,但是会保存缓存数据  
                //.noCache()  
                //不使用缓存,同时也不保存缓存数据  
               // .noStore()  
                //只使用缓存,(如果我们要加载的数据本身就是本地数据时,可以使用这个,不过目前尚未发现使用场景)  
                //.onlyIfCached()  
                //手机可以接收响应时间小于当前时间加上10s的响应  
//                .minFresh(10,TimeUnit.SECONDS)  
                //手机可以接收有效期不大于10s的响应  
//                .maxAge(10,TimeUnit.SECONDS)  
                //手机可以接收超出5s的响应  
                .maxStale(5,TimeUnit.SECONDS)  
                .build();  
        Request request = new Request.Builder()  
                .cacheControl(cc)  
                .url("http://192.168.152.2:8080/cache").build();  
第二:使用cachecontrol中的常量

 Request request = new Request.Builder()  
                //强制使用网络  
//                .cacheControl(CacheControl.FORCE_NETWORK)  
                //强制使用缓存  
                .cacheControl(CacheControl.FORCE_CACHE)  
                .url("http://192.168.152.2:8080/cache").build();

到此。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值