Android开发Android开发经验谈Android开发

Android性能优化之网络优化

2019-01-30  本文已影响14人  881ef7b85f62

1、 前言

移动互联网发展到现在,用户的联网方式已经完成了由流量依赖到Wifi依赖的转变。虽然网络环境在变好,但也对网络的应用提出了更高的要求,同时开发人员对网络的重视度却在下降。确实Wifi场景下用户的网络质量变好了,而且用户对网络流量消耗的敏感度也在下降。但是对网络问题的忽视,在网络状态不好的场景下,会表现的很明显。

2、 网络问题

2.1 流量耗费

过多以及没有经过处理的网络请求,会消耗用户的网络流量。Android用户一般都会安装手机管理类App,可以方便清楚查看到每个App耗费的流量,高流量消耗会导致经常处于非Wifi场景下的用户卸载。

2.2 电量消耗

与第一条流量消耗类似,耗电也会导致用户最终的卸载。

2.3 用户体验差

网络请求耗时会给用户带来卡顿的产品体验,虽然可以使用Loading提升用户体验,但属于治标不治本。例如最近我在使用某火爆单车App,每次网络请求都能超出我的耐心,于是我就转投另一款单车App!

2.4 其它

3、 网络监控

3.1 Network Monitor

Android Studio自带的Network Monitor简单直观,可以看出时间段之内的网络请求数量及访问速率;

image

3.2 Charles、Fiddler等抓包工具

使用Charles、Fiddler等抓包工具同样可以实现Network Monitor的功能,而且更加强大。

image

3.3 Stetho

Stetho是Facebook出品的一个Android应用的调试工具。无需Root即可通过Chrome,在Chrome Developer Tools中可视化查看应用布局,网络请求,sqlite,preference等。同样集成了Stetho之后也可以很方便的查看网络请求的各种情况。

image

4、 网络优化

重点来了,网络优化主要从三个方面进行:1. 速度;2. 成功率;3. 流量。

4.1 Gzip压缩

HTTP协议上的Gzip编码是一种用来改进WEB应用程序性能的技术,用来减少传输数据量大小,减少传输数据量大小有两个明显的好处:

4.2 IP直连与HttpDns;

DNS解析的失败率占联网失败中很大一种,而且首次域名解析一般需要几百毫秒。针对此,我们可以不用域名,才用IP直连省去 DNS 解析过程,节省这部分时间。

另外熟悉阿里云的小伙伴肯定知道HttpDns:HttpDNS基于Http协议的域名解析,替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式,可以避免Local DNS造成的域名劫持和跨网访问问题,解决域名解析异常带来的困扰。

4.3 图片处理

4.3.1 图片下载
4.3.2 图片上传

图片(文件)的上传失败率比较高,不仅仅因为大文件,同时带宽、时延、稳定性等因素在此场景下的影响也更加明显;

备注:图片上传是一项看似简单、共性很多但实际上复杂、需要细分的工作。移动互联网的场景和有线的场景是有很多区别的,例如移动网络的质量/带宽经常会发生“跳变”,但有线网络却是“渐变”。

图片上传其它细节请参见《移动App性能评测与优化》一书。

4.4 协议层的优化

使用最新的协议,Http协议有多个版本:0.9、1.0、1.1、2等。新版本的协议经过再次的优化,例如:

新的版本不仅可以节省资源,同样可以减少流量;我对Http2并没有实际接入经验,此处仅从原理进行分析。

4.5 请求打包

合并网络请求,减少请求次数。对于一些接口类如统计,无需实时上报,将统计信息保存在本地,然后根据策略统一上传。这样头信息仅需上传一次,减少了流量也节省了资源。

4.6 网络缓存

对服务端返回数据进行缓存,设定有效时间,有效时间之内不走网络请求,减少流量消耗。对网络的缓存可以参见HttpResponseCache。

备注:我们也可以自定义缓存的实现,一些网络库例如:Volley、Okhttp等都有好的实践供参考。

4.7 网络状态

根据网络状态对网络请求进行区别对待,2G与Wifi状态下网络质量肯定是不一样的,那对应的网络策略也应该是不一样的。例如:在Wifi场景下可以进行数据的预取、一些统计的集中上传等;而在2G场景下此类操作以及网络请求的次数策略都应该调低。网络状态可以由TelephonyManager.getNetworkType()方法获取到。

image

备注:还可以使用Facebook的开源库network-connection-class来做网络状态的判断。

4.8 其它

5、 其它

以上Android资料以及更多Android相关资料及面试经验可在QQ群里获取:936903570。有加群的朋友请记得备注上简书,谢谢

上一篇下一篇

猜你喜欢

热点阅读