本篇文章主要介绍了"如何更高效地使用 OkHttp",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下:
原文链接: Effective OkHttp原文作者 : Michael Parker译文出自 : 掘金翻译计划译者 : Brucezz校对者: iThreeK...
- 原文链接: Effective OkHttp
- 原文作者 : Michael Parker
- 译文出自 : 掘金翻译计划
- 译者 : Brucezz
- 校对者: iThreeKing , Adam Shen , Jaeger
- 转载请联系,并注明出处。
在为 可汗学院 开发 Android app 时, OKHttp 是一个很重要的开源库。虽然它的默认配置已经提供了很好的效果,但是我们还是采取了一些措施提高 OkHttp 的可用性和自我检查能力:
1. 在文件系统中开启响应缓存
有些响应消息通过包含 Cache-Control HTTP 首部字段允许缓存,但是默认情况下,OkHttp 并不会缓存这些响应消息。因此你的客户端可能会因为不断请求相同的资源而浪费时间和带宽,而不是简单地读取一下首次响应消息的缓存副本。
为了在文件系统中开启响应缓存,需要配置一个 com.squareup.okhttp.Cache 实例,然后把它传递给 OkHttpClient 实例的 setCache 方法。你必须用一个表示目录的 File 对象和最大字节数来实例化 Cache 对象。那些能够缓存的响应消息会被写在指定的目录中。如果已缓存的响应消息导致目录内容超过了指定的大小,响应消息会按照最近最少使用( LRU Policy )的策略被移除。
正如 Jesse Wilson 所建议的 ,我们将响应消息缓存在 context.getCacheDir() 的子文件夹中:
// 缓存根目录,由这里推荐 -> http://stackoverflow.com/a/32752861/400717.
// 小心可能为空,参考下面两个链接
// https://groups.google.com/d/msg/android-developers/-694j87eXVU/YYs4b6kextwJ 和
// http://stackoverflow.com/q/4441849/400717.
final @Nullable File baseDir = context.getCacheDir();
if (baseDir != null) {
final File cacheDir = new File(baseDir, "HttpResponseCache");
okHttpClient.setCache(new Cache(cacheDir, HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));
}
在可汗学院的应用中,我们指定了 HTTP_RESPONSE_DISK_CACHE_MAX_SIZE 的大小为 10 * 1024 * 1024 ,即 10MB。
2. 集成 Stetho
Stetho 是一个 Facebook 出品的超赞的开源库,它可以让你用 Chrome 的功能—— 开发者工具 来检查调试你的 Android 应用。
Stetho 不仅能够检查应用的 SQLite 数据库和视图层次,还可以检查 OkHttp 的每一条请求和响应消息:

这种自我检查方式(Introspection)有效地确保了服务器返回允许缓存资源的 HTTP 首部时,且核缓存资源存在时,不再发出任何请求。
开启 Stetho,只用简单地添加一个 StethoInterceptor 实例到网络拦截器(Network Interceptor)的列表中去: