Android网络优化方案

一、对于网络的优化,我们可以从以下五个维度来进行。
1.流量优化

精确获取网络流量的消耗量,解决整体均值掩盖单点异常流量的问题。

2.网络监控

建设全面的网络监控,因为粗粒度的监控不能够帮助我们发现和解决问题。

3.流量消耗

1、精准获取一段时间的流量消耗、网络类型、前后台。

2、用户流量消耗均值、异常率(消耗多、次数多)。

3、完整链路全监控(Request、Response)、主动上报。

4.网络请求质量

1、请求时长、业务成功率、失败率、TOP 失败接口,导致请求失败的原因通常有两种情况:
1)、弱信号:可以简单看成手机信号只有一两格的时候,这是不仅仅是信令(无线网络通信的都是一个个的信令)发出去困难,还可能导致不断切换网络、基站。App 只能在应用层做重试,因为弱信号一般都是一时的。
2)、拥塞网络:可以类比为堵车、排队的场景,数据包排队,信令也在排队。这时 App 不断重试,只会使得拥塞网络更为严重。我们只能让自己的非核心业务不要去排队,并让核心业务的数据量更少,协议来回更少。

2、用户体验

3、请求速度、成功率:网络正常时如何更好地利用带宽提升网络请求速度?

4、弱网:网络不稳定是如何最大程度上保证网络的连通性?

5、安全:如何防止被第三方劫持、窃听甚至篡改?

二、网络优化工具
1、Network Profiler

特点
1)、显示实时网络活动:发送、接收数据及连接数。
2)、需启动高级分析。
3)、仅支持 HttpURLConnection 与 OkHttp

选中 Connection View 特定的一条数据即可在右边看到该请求对应的网络数据。

三、精准获取流量消耗
1、如何判断 App 流量消耗偏高?

1)、绝对值看不出高低。
2)、对比竞品,相同 Case 对比流浪消耗。
3)、异常监控超过正常指标。

2、线上流量获取方案
  • NetworkStatsManager
    API 23 之后。
    特点
    1)、获取指定时间间隔内的流量信息。
    2)、获取不同网络类型下的消耗。
    NetUtils.getStats
    获取指定时间间隔的 蜂窝 + WIFI 流量总信息
四、常见使用网络的场景
  • 1、数据压缩
    POST 请求 Body 使用 GZip 压缩,同时服务端返回 Body 也使用 GZip 压缩。

  • 2、图片
    图片使用策略细化:让 服务端/CDN 云服务器 优先使用缩略图/WebP格式图片。
    根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比
    较多)。

  • 3、性能日志上报:批量 + 特定场景上报
    APM 相关、单点问题相关。例如埋点数据可以等到某一时机点(例如 开启了 WIFI、数据量过大必须上传一部分时)再上传。

  • 4、数据缓存
    服务端返回加上过期时间,避免每次重新获取。 节约流量且大幅提高数据访问速度,更好的用户体验。

  • 5、使用Retrofit和Okhttp实现网络缓存
    5.1.配置okhttp中的Cache

OkHttpClient okHttpClient = new OkHttpClient();
File cacheFile = new File(context.getCacheDir(), "[缓存目录]");
Cache cache = new Cache(cacheFile, 1024 * 1024 * 100); //100Mb
okHttpClient.setCache(cache);

5.2.配置请求头中的cache-control

@Headers("Cache-Control: public, max-age=3600)
@GET("merchants/{shopId}/icon")
Observable<ShopIconEntity> getShopIcon(@Path("shopId") long shopId);

6、合并网络请求、减少请求次数。

7、流量兜底能力
如果发现流量异常,我们可以通过后台服务器终止协议交互,以避免问题恶化。

参考:
https://www.jianshu.com/p/23a7d13bbe7f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章