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

三丶获取数据优化

  • 连接复用:节省连接时间,如开启keep-alive 。Android中HttpUrlConnection默认是开启的 。
  • 请求合并:可以将多个请求合并为一个进行请求 。
  • 减小请求数据,并压缩:对于post请求,Body可以做Gzip压缩,如日志 。
  • 精简数据格式:对于后台返回的数据,尽量使用Json来代替XML 。
  • 数据的增量更新
四丶接口设计1.API设计App与Server之间的API设计要考虑网络请求的频次, 资源的状态等. 以便App可以以较少的请求来完成业务需求和界面的展示 。
  • 例如, 注册登录. 正常会有两个API, 注册和登录, 但是设计API时我们应该给注册接口包含一个隐式的登录. 来避免App在注册后还得请求一次登录接口(有可能失败, 从而导致业务流程失败)
  • 再例如, 上文提到的获取repo详情, 实际上请求了4个接口, 请求了repo的信息, forks列表, contributors列表, readme, 这是因为github提供的接口是尽量单一职责的. 然而在我们的实际开发中, 我们的Server除了提供这些单一职责的小接口外, 最好还能组合一个满足客户端业务需求的repo详情接口出来 。
2.Gzip压缩
使用Gzip来压缩request和response, 减少传输数据量, 从而减少流量消耗 。
考虑使用Protocol Buffer代替JSON
从前我们传输数据使用XML, 后来使用JSON代替了XML, 很大程度上也是为了可读性和减少数据量(当然还有映射成POJO的方便程度) 。
Protocol Buffer是google推出的一种数据交换格式 。
如果我们的接口每次传输的数据量很大的话, 可以考虑下protobuf, 会比JSON数据量小很多 。当然相比来说, JSON也有其优势, 可读性更高 。
3.图片的Size
上面Network Monitor中看到的22s到27s之间的有多次请求, 且数据量还很大. 就是在获取图片资源 。图片相对于接口请求来说, 数据量要大得多. 故而也是我们需要优化的一个点 。
我们可以在获取图片时告知服务器需要的图片的宽高, 以便服务器给出合适的图片, 避免浪费 。现在很多公司的图片资源都是使用第三方的云存储服务的(七牛, 阿里云存储之类的)
以七牛为例, 可以在请求图片的url中添加诸如质量, 格式, width, height等path来获取合适的图片资源:
我的Android网络优化为什么不行?

文章插图
 
五丶弱网优化


推荐阅读