Android性能优化-网络优化

网络监控工具

  • Network Monitor

Android Studio自带的Network Monitor(Android Studio 3.1.2版本名称为Android Profiler)简单直观,可以看出时间段之内的网络请求数量及访问速率;

Network Monitor

  • Stetho

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

Stetho查看网络请求

网络优化

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

  • Gzip压缩

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

1.可以减少流量消耗

2.可以减少传输的时间

  • IP直连与HttpDns

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

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

什么是HttpDns?

OkHttp实现HttpDns

  • 图片下载优化

1. 使用WebP格式: 同样的照片,采用WebP格式可大幅节省流量,相对于JPG格式的图片,流量能节省将近 25% 到 35%;相对于PNG格式的图片,流量可以节省将近80%。最重要的是使用WebP之后图片质量也没有改变。

2. 使用缩略图: App中需要加载的图片按需加载,列表中的图片根据需要的尺寸加载合适的缩略图即可,只有用户查看大图的时候才去加载原图。不仅节省流量,同时也能节省内存!之前使用某公司的图片存储服务在原图链接之后拼接宽高参数,根据参数的不同返回相应的图片。

  • 图片上传优化

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

1.避免整文件传输,采用分片传输

2.根据网络类型以及传输过程中的变化动态的修改分片大小;

3.每个分片失败重传的机会。

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

  • 请求打包

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

  • 网络缓存

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

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

  • 其他

断点续传,文件、图片等的下载,采用断点续传,不浪费用户之前消耗过的流量;

重试策略,一次网络请求的失败,需要多次的重试来断定最终的失败,可以参考OkHttp的重试机制实现。

尽量避免客户端的轮询,而使用服务器推送的方式;

数据更新采用增量,而不是全量,仅将变化的数据返回,客户端进行合并,减少流量消耗;


 上一篇
Android性能优化-电量优化 Android性能优化-电量优化
电量分析工具 Battery Historian: 通过Battery Historian可以方便的看到各耗电模块随着时间的耗电情况:包含操作类型、执行时间、对应App等;还可以进行筛选特定的App,给出一个总结性的说明,包括:Networ
2017-05-02
下一篇 
Android性能优化-内存优化 Android性能优化-内存优化
常见内存泄漏解决方案 单例导致内存泄露 单例模式在Android开发中会经常用到,但是如果使用不当就会导致内存泄露。因为单例的静态特性使得它的生命周期同应用的生命周期一样长,如果一个对象已经没有用处了,但是单例还持有它的引用,那么在整个应
2017-05-02
  目录