我的Android网络优化为什么不行?

前言:为什么网络优化比别人慢?优化那些还不够?应该加强哪里?1.Android应用为什么需要考虑网络优化,主要基于以下几个原因:

  1. 流量:App的移动网络流量消耗对用户来说是比较敏感的;
  2. 电量:网络请求对电量的消耗是比较大的,影响手机的待机时间;
  3. 用户体验:网络请求是耗时操作,如果App请求等待时间长,会给用户网络卡, 应用反应慢的感觉 。
网络请求优化的目的是尽可能地减少用户等待的时间、减少用户的流量使用、减少对手机电量的消耗,最终达到提升用户体验 。
2.网络性能优化主要从如下几个方面着手:
  1. 流量消耗
  2. 网络速度
  3. 获取数据优化
  4. 接口设计
  5. 弱网优化
一丶流量消耗优化所谓流量优化,就是在保证数据正确的前提下,如何保证尽可能地少消耗用户流量 。虽然现在的流量费用越来越便宜,但是减少流量本身并不是最重要的目的,而是提升用户体验带来的结果 。
1.使用本地缓存,减少网络请求分为几种情况:
  • 基本数据:可以使用持久化技术,比如本地数据库,sharedPreference,本地文件,来记录之前请求下来的数据 。而且具有一定的过期时效来保证数据的可用性 。
  • 图片:同样的,在本地缓存和此图片url映射的图片,可以避免图片的网络请求 。目前很多优秀的图片加载框架,如Glide,Picasso,Fresco都具备这种能力 。
  • 文件:如一般的文件,webview里的js,css,html等,当然也要注意过期时效 。
2.合理合并api接口,减少网络请求这种方案可以使得多次网络请求合并为一次,减少网络连接来回往返的等待时长 。
比如有一种场景:App 本地数据库缓存有N个表,当老用户卸载重装时,首次检查需要把远端的数据一次性download到本地来,保证两端的一致性 。
【我的Android网络优化为什么不行?】由于之前必然为每个表设计了一个api,但是在这种场景下,如果还是继续使用这些api的话,就需要N次网络请求,结果不仅会造成N次网络I/O和磁盘写入I/O,还会使得服务端查找性能降低,用户等待时间较长,本地磁盘写入性能降低 。
针对这种场景,完全可以设计一个bulk sync api把这些api整合为一个,这样一来客户端只需一次网络I/O即可获取所有数据,服务端查找性能也提升了一个数量级,本地磁盘I/O也可以把此次返回的数据当成一次事务一次性插入数据库中,大大减少了用户等待时间,同时也提升了网络和本地磁盘写入性能 。
3.减少网络请求的数据量当网络请求不可避免的情况下,此时就要考虑如何减少网络请求携带的数据量 。
同样也分几种情况:
  • 基本数据:使用数据压缩方式,比如protoBuff格式,okhttp开启gzip压缩,支持Http 2.0,使用其头部压缩,二进制格式替代Http 1.1 文本格式的特性 。
  • 图片:当不得不获取一张本地缓存没有的图片时,就不得不请求服务端获取 。此时没有必要使用最高清的大尺寸的原始图片,完全可以针对客户端显示的图片尺寸和屏幕密度,向服务器请求较小的尺寸,和较低质量的图片,服务器通过图片处理,返回符合此参数的图片给客户端进行显示 。
  • 文件:普通文件可以进行zip打包下发,而如webview需要加载的css,js,html还可以事先使用webpack压缩,然后再zip打包下发 。
二.丶速度优化在进行网络流量优化的同时;由于网络请求次数;请求携带的数据量变少了;这其实也是在变相地提高网络速度 。
另外,还有其他一些方式: