一.网络优化的重要性
网络请求是几乎每个APP都需要用到的,网络请求的快慢直接影响到用户的使用体验。
很多人觉得网络优化是服务端的事情,客户端只要找个好的网络请求框架(如OKHttp)就可以了,并不需要再去做什么优化。其实不然,客户端这边在网络优化方面还是有很多事情可以做的。
二.网络优化主要从哪些方面入手呢?
1.网络库的选择?
相信大家网络请求方面都是使用开源的网络库,那么为什么要使用网络库呢?
(1)网络库统一了接口,无论同步还是异步接口的简单易用,还可以统计进行网络数据解析。
(2)网络库分装了连接池的使用,降低了并发连接数。
(3)网络库内部实现了响应缓存避免了大量的重复访问。
(4)异步请求方面做了很好的封装。
因此选择一个合适的网络库是非常重要的,现在使用流行的网络库有Volley、okhttp、Retrofit等。
(1)Volley是基于HttpURLConnection支持图片加载、网络请求排序、优先级处理、缓存,扩展性好,
但因为Volley使用的Request和Response都是把数据放到Byte数组中,若数据大等于数组大,消耗内存,
所以Volley适合数据量小的轻量级应用。
(2)okhttp是基于原生http的,支持同步异步请求、支持gzip减少数据流量、缓存响应数据、自动重连等,性能好请求处理速度快,数据量大和小的应用都适用。
(3)Retrofit底层网络框架是基于okhttp的,因此拥有okhttp的特点,通过注解配置请求,封装好,代码量少。
2.请求图片处理
(1) 加载图片时按需加载,如缩略图加载小图片,查看大图时才加载大图片。
(2)使用图片加载框架,图片加载框架对缓存做了很好的优化,流行的图片加载框架有Glide、Picasso等。
3.常用数据缓存
(1)对于常访问的数据或首页数据,尽量缓存在本地,加载时优先加载本地数据,然后在请求网络数据,更新页面并更新缓存。
(2)在网络丢失或者网络差需要保存数据时, 网数据保存在本地,并且把发出的请求添加到队列中,当网络恢复的时候再及时发 出。
4.网络分级请求
(1)将网络分成移动网络、宽带网络、强网络、弱网络,不同的网络环境对请求进行不同的处理,例如在移动网络下需要进行下载任务时,停止或提示用户,在弱网络下对图片的请求的区分等。
(2) 网络状态可以由TelephonyManager.getNetworkType()方法获取到。
(3)对下载和上传文件采用断点续传功能,不浪费用户之前耗费的时间和流量。
5.流量使用优化
(1)局部更新 、分页加载
(2) 数据加载采用增量,有更新数据时才请求新数据,合并客户端旧数据。
(3)尽量避免客户端轮询,采用服务端推送方式
6.请求数据优化
(1)合并请求,可以将多个请求合并成一个接口请求
(2)压缩请求数据
(3)精简数据格式,只取需要的数据字段
三.网络使用分析
使用AndroidStudio3.0新增的Profile分析网络使用情况:
|