常见Android面试题之Android 性能优化的网络优化

246 阅读3分钟

流量

网络第一个影响的app指标当然是流量,在手机设置界面可以清楚查看到每个 app 耗费的流量,极端情

况下会造成用户卸载。

电量

频繁的网络请求和网络时常是引发电量的主要原因,每次发送请求都会激活电信号,同样耗电也会对用

户产生恶略的影响,甚至卸载。

用户体验

一些网络框架会优化处理内部线程池,但线程池毕竟有限,网络请求过多或请求数据包体大,就会造成

网络阻塞,也就是一些用户所谓的卡顿,在弱网方面可能表现更差,所以网络框架的好坏直接影响着整

个app的用户体验。

安全

网络安全同样是网络优化中十分重要的一部分,怎样防止被第三方窃听/篡改或冒充,防止运营商劫

持,同时又不影响性能,没有安全体系的网络架构同样会对服务端或者客户端造成直接或间接的影响。

网络监控

Network Monitor

Network Monitor Android Studio自带的网络监测工具,可以看出时间段之内的网络请求数量及访问速

率。

Charles 抓包工具

本人更习惯于使用 charles 进行网络监控,这可以查看更多的数据指标,查看请求request、response

更加直观。网络优化

本人觉得网络优化主要从以下几个方面入手:

  • 请求速度

  • 链接成功率

  • 流量消耗

  • 安全策略

网络请求过程:

  • DNS 解析,请求DNS服务器,获取IP地址

  • 建立连接,包括 tcp 三次握手、安全协议

  • 发送和接收数据,解码数据

优化* DNS*解析

DNS解析在网路错误中占比较高,使用IP直连方式替代DNS服务器解析,可以减少域名解析几百毫秒的

时间消耗。

连接池复用

keep-alive HTTP 协议里有个 keep-alive,HTTP1.1默认开启,一定程度上缓解了每次请求都要进行TCP

三次握手建立连接的耗时。原理是请求完成后不立即释放连接,而是放入连接池中,若这时有另一个请

求要发出,请求的域名和端口是一样的,就直接拿出连接池中的连接进行发送和接收数据,少了建立连

接的耗时。

数据压缩

目前比较成熟的方案未 GZIP 压缩,正常情况下压缩率均值能打包 30-50之间,可以极大的提升传输速

度和节省流量,必要是可以使用 Protocol Buffer 替换 JSON 。

弱网优化弱网优化,在弱网时要是制定合适的超时时间,控制网络并发,合并打包请求,调优TCP参数,使用

TCP优化算法。

对服务端的TCP协议参数进行调优,以及开启各种优化算法,使得适合业务特性和移动端网络环境,包

括RTO初始值,混合慢启动,TLP,F-RTO等。

针对弱网的这些细致优化暂未成为标准,开源网络库 mars 有实现可以借鉴,若有需要可以使用。

网络安全

  • 采用 Https 双向认证

  • 参数加密校验,防窃听/篡改或冒充

  • 加密秘钥保护,采用 so 方式进行秘钥提取