android 网络请求总结

1 先看下基础部分:

android okhttp网络访问是基于 tcp/ip 的

最上层是应用层的封装,有http,https(加密),ftp

下面是socket套接字的封装,就是将ip和端口的封装

在下面就是tcp/udp 在下面 ip协议层了。

2 下面看下常用的http/https请求方式

Volley:四个网络调度线程和一个缓存调度线程 适用范围:非大文件(缓存过大影响内存),非频繁数据(线程池线程数小)

OKHttp:用起来有点麻烦,使用时需要一定的经验,比如我的总结:

1 OkHttpClient是线程池和连接池的最小单位,能复用就复用,不然会产生多个线程池和连接池

2 可以用OkHttpClient对象newbuilder()来实现定制新的client请求,依然能实现共享线程池和连接池。

3 内部是quene的方式执行,但无法返回过来的也是顺序过来,需要及时cancel掉对应的call

对应的回调是 java.net.SocketException: Socket closed

关闭方案:

//添加tag

Request request = new Request.Builder().

url(url).tag("requestKey").build();

//When you want to cancel:

//关闭等待队列里的

for (Call call : mHttpClient.dispatcher().queuedCalls()) {

if (call.request().tag().equals("requestKey"))

call.cancel();

}

//B)关闭执行线程池里执行的call(running队列也包含)

for (Call call : mHttpClient.dispatcher().runningCalls()) {

if (call.request().tag().equals("requestKey"))

call.cancel();

}

3 改进方案思考

1 okhttp里用到的okio 是不是可以用mmap来替代,而它的缓存机制仍保留

2 网路差的时候是不是可以自动改为udp方式

期待我的改进版本的okhttp不,期待,我就把这两项给弄了

相关推荐
雨白1 小时前
Android 多线程:理解 Handler 与 Looper 机制
android
sweetying4 小时前
30了,人生按部就班
android·程序员
用户2018792831674 小时前
Binder驱动缓冲区的工作机制答疑
android
真夜4 小时前
关于rngh手势与Slider组件手势与事件冲突解决问题记录
android·javascript·app
用户2018792831674 小时前
浅析Binder通信的三种调用方式
android
用户095 小时前
深入了解 Android 16KB内存页面
android·kotlin
火车叼位5 小时前
Android Studio与命令行Gradle表现不一致问题分析
android
前行的小黑炭7 小时前
【Android】 Context使用不当,存在内存泄漏,语言不生效等等
android·kotlin·app
前行的小黑炭8 小时前
【Android】CoordinatorLayout详解;实现一个交互动画的效果(上滑隐藏,下滑出现);附例子
android·kotlin·app
用户20187928316720 小时前
Android黑夜白天模式切换原理分析
android