android 网络请求总结

news/2024/12/15 8:34:55/

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不,期待,我就把这两项给弄了


http://www.ppmy.cn/news/1364650.html

相关文章

JS中使用bignumber.js处理大额数据进行高精度小数运算的实战方法

目录 前言 一、JavaScript 中精度问题 1、精度问题汇总 二、使用bignumber.js解决精度问题 1、安装bignumber.js 2、静态方法 3、实例方法 4、大额数据处理函数 5、大额数据比较函数 前言 在金融以及加密货币领域,对于数据的精度要求非常高。比如&#xf…

IP 电话

1 IP 电话概述 IP 电话是在互联网上传送多媒体信息。 多个英文同义词: VoIP (Voice over IP) Internet Telephony VON (Voice On the Net) 1.1 狭义的和广义的 IP 电话 狭义的 IP 电话:指在 IP 网络上打电话。 广义的 IP 电话:不仅仅是…

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射,编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码,包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…

Excel的中高级用法

单元格格式,根据数值的正负分配不同的颜色和↑ ↓ 根据数值正负分配颜色 2-7 [蓝色]#,##0;[红色]-#,##0 分配颜色的基础上,根据正负加↑和↓ 2↑-7↓ 其实就是在上面颜色的代码基础上加个 向上的符号↑,或向下的符号↓ [蓝色]#,##0↑;[红色…

深度学习手写字符识别:推理过程

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

C++计时方法

clock()函数 colck函数返回从进程开始使用进程结束所使用的时间,单位:毫秒在Linux上,获得CPU时间,在Windows上,获得间隔时间CLOCKS_PER_SEC:常量1000!!!clock函数计算并…

Go语言反射(reflect)

反射是应用程序检查其所拥有的结构,尤其是类型的一种能。每种语言的反射模型都不同,并且有些语言根本不支持反射。Go语言实现了反射,反射机制就是在运行时动态调用对象的方法和属性,即可从运行时态的示例对象反求其编码阶段的定义…

textbox跨线程写入

实现实例1 实现效果 跨线程实现 // 委托,用于定义在UI线程上执行的方法签名 //public delegate void SetTextCallback(string text);public void textBoxText(string text){// 检查调用线程是否是创建控件的线程 if (textBox1.InvokeRequired){// 如果不是&#…