Android性能调优 - 网络优化

1.前言

  • 在移动互联网的快速发展环境下,手机用户日益对网络的使用或体验有着更深度的诉求,因此应用中的网络体验已经显得由此重要,而背后对开发者在网络性能有更高的要求。
  • 网络影响:
    1.最直观的就是用户交互体验
    2.流量的流失;
    3.电量的消耗;
  • 本文从连接、传输、监控 三个维度提出相关的优化。
  • 文章中实例 linhaojian的Github

2.HTTP请求过程

http请求流程.png
  • 通过上图可以很清楚的理解HTTP协议的请求过程:
    1.客户端输入域名,通过浏览器请求发送
    2.通过DNS解析域名,得到真正需要请求的服务器IP地址
    3.服务端接收到请求内容之后,做出响应
    (HTTP使用Socket构建基于TCP/IP协议的通讯)
  • 因此我们就可以针对上述流程总结可优化2个方向:连接、传输

3.连接

3.1 网络状态

  • 可以根据不同的网络状态(2G、3G、4G、Wifi)针对性的提供处理策略。

3.2 弱网处理

  • 弱网的影响:存在较多的丢包、误码、超时、连接中断以及难以接入网络等情况;
  • 针对弱网情况,可做一下优化:
    1.失败重试: 可在Retrofit等网络框架添加拦截器,实现失败重试;

3.3 IP直连

  • 优点:能减少DNS的域名解析过程,从而提升连接或请求的速度。
  • 缺点:IP暴露,不安全。

3.4 HttpDns

  • 出自:是阿里研发的产品HttpDns
  • 作用:使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTPDNS服务器,从而绕过运营商的Local DNS,能够避免Local DNS造成的域名劫持问题和调度不精准问题;

3.5 Http1.0、Http1.1、Http2.0

  • 影响HTTP网络请求主要是 带宽延迟
  • Http1.0每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接,每次请求连接都需要3次握手,连接成本较高,性能较差。
  • Http1.1
    * 持久连接: 即TCP连接默认不关闭,可以被多个请求复用(对于同一个域名,大多数浏览器允许同时建立6个持久连接);
    * 管道机制: 即在同一个TCP连接里面,客户端可以同时发送多个请求,举例:需要发送2个请求,以前HTTP1.0的做法是请求一次需要等等响应,再请求第二次类似于一问一答,而HTTP1.1就支持同时请求,之后按序响应;
    * 缺点:队头阻塞,上述已说明HTTP1.1的TCP连接复用响应按序的,那么在多个请求使用同一个TCP连接的时候,一个响应的特别慢的时候,会影响后续的响应速度。
  • Http2.0
    * 降低延迟: 路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
    * 请求优先级: 多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。
    * header压缩: 前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
    * 数据传输: HTTP/2采用二进制格式而非文本格式。

3.6 连接复用

  • 根据相同的HOST请求,可以设计连接的缓存,实现连接池进行复用。例如:OkHttp中的Dispatcher

4.传输

4.1 Protocol Buffers

  • 定义:Protocol Buffers 和 XML、JSON一样都是结构数据序列化的工具。
  • 作用:通过将结构化的数据(拥有多种属性)进行序列化,从而实现**数据存储和交换的功能 **。
  • 优点:在传输数据量较大的需求场景下,Protocol Buffer 比 XML、JSON 更小(3到10倍)、更快(20到100倍)、使用 & 维护更简单;而且 Protocol Buffer 可以跨平台、跨语音使用。

4.2 Gzip

  • 定义:在 http/1.0 协议中关于服务端发送的数据可以配置一个 Content-Encoding 字段,这个字段用于说明数据的压缩方法。(Content-Encoding:gizp、Accept-Encoding: gzip)

4.3 网络缓存

  • 网络缓存:提供一种将数据存储到本地的思想,实现减少服务器的请求负荷、加快请求速度、无网也能显示内容。例如:OkHttp的缓存机制(强制缓存对比缓存)。

强制缓存:在缓存数据未失效的情况下,可以直接使用缓存数据,由两个字段Expires和Cache-Control用于标明失效规则。
对比缓存:表示需要和服务端进行相关信息的对比,由服务器决定是使用缓存还是最新内容,如果服务器判定使用缓存,返回响应吗304,判定使用最新内容,则返回响应码200和最新数据(ETag和If-None-Match)。

4.4 图片传输

1.可通过Webp的图片格式传输。
2.可实现图片缓存机制(`二级缓存:Lrucache;DisLrucache等`)。

4.5 预加载

  • 在设计业务请求时,可合理的设计 数据提前加载 的方式,提升用户的体验。

5.监控

5.1 Android Profiler

Android Profile.png
  • Receiving:表示下行流量, 即下载接收;
  • Sending:表示上行流量, 即上传发送;

5.2 Stetho

  • Stetho 是Facebook开源的Andorid调试工具。当你的应用集成Stetho时,开发者可以访问Chrome,在Chrome Developer Tools中查看应用布局,网络请求,sqlite,preference等等,可视化一切应用操作(更重要的是不用root)。
    stetho.png

    stetho1.png

5.总结

  • 到此,网络优化 介绍完毕。
  • 如果喜欢我的分享,可以点击 关注 或者 ,你们支持是我分享的最大动力 。
  • linhaojian的Github

欢迎关注linhaojian_CSDN博客或者linhaojian_简书

不定期分享关于安卓开发的干货。


写技术文章初心

  • 技术知识积累
  • 技术知识巩固
  • 技术知识分享
  • 技术知识交流
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容