说明
在项目中对第三方服务的调用,使用了OkHttp进行http请求,这当中踩了许多坑。本篇博文将对OkHttp使用过程遇到的问题进行总结记录。
正文
OkHttpClient 单例
在刚开始使用时,没有将OkHttpClient单例化,造成的后果就是服务器OOM异常,can’t create native thread…
为什么会出现OOM,提示无法创建本地线程?
通过查看资料文档发现,每个client对象都有自己的线程池和连接池,如果为每个请求都创建一个client对象,自然会出现内存溢出。所以官方建议OkHttpClient应该单例化,重用连接和线程能降低延迟和减少内存消耗。
OkHttpClients should be shared
OkHttp performs best when you create a single OkHttpClient instance and reuse it for all of your HTTP calls. This is because each client holds its own connection pool and thread pools. Reusing connections and threads reduces latency and saves memory. Conversely, creating a client for each request wastes resources on idle pools.
官方介绍了三种创建client的方式:
- new OkHttpClient()
该方式将创建一个使用默认设置的clien