为了优化网络环境和减轻服务器负担,很多网络请求都是可以使用缓存的。比如某个界面,每次刷新都会调用接口。这种操作,无形中给服务器增加了几倍的访问量。那么,有没有方法可以减少这类无效的访问呢?答案是肯定的。
给网络请求加上缓存。并设置缓存时间,当在这个时间段类,可以不用访问服务器,直接拿到上次访问得到的数据。这样,在有效期内,即便网络断开,只要还在缓存有效期内,也可以拿到服务端返回的数据。
/**
* Created by admin on 2018/5/8.
*/
public class NetworkInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
//一、无论有无网路都添加缓存。
Request request = chain.request();
Response response = chain.proceed(request);
int maxAge = 60;
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.addHeader("name","shone")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
}
}
将Interceptor加入到请求中
private void testOnlyRequest() throwsException{
File cacheFile= new File(this.getApplication().getCacheDir(), "caheData");//设置缓存大小
Cache cache = new Cache(cacheFile, 1024*1024*14);//google建议放到这里//步骤一、创建okhttp3 client
final OkHttpClient client = newOkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(15,TimeUnit.SECONDS)
.addNetworkInterceptor(new CacheInterceptor())//这里大家一定要注意了是addNetworkOnterceptor别搞错了啊。
.cache(cache)
.build();new Thread(newRunnable() {
@Overridepublic voidrun() {
Retrofit retrofit= newRetrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
GetRequest_Interface request= retrofit.create(GetRequest_Interface.class);
Call call=request.getCall_1();
Translation1 translation1= null;try{
translation1=call.execute().body();
translation1.show();
}catch(IOException e) {
e.printStackTrace();
}
}
}).start();
}
看看效果:
log日志可以看出,我发起了三次网络请求。三次都得到了结果。
在看看我抓包日志。可以看出,我只进行了一次服务器请求。
通过示例,应该可以看出,添加了缓存,可以明显降低服务器请求次数。