One of the most frequent performance problems your users will notice is how your app reacts when moving from a great network connection to a bad one. If things slow down, get sluggish, or start showing too many spinners, they can show your app the “uninstall“ button.
Video Link


Bottlenecks Happen Anywhere

在一次由app发起的网络请求过程中,会建立“手机-基站-负载均衡服务器-后端server”的一个往复链路,在这个链路的任何一个环节,都可能造成网络请求的延迟。


Adapting To Lagency

为了适应复杂多变的网络环境,必须做下面两件事:

  1. Gather information.
  2. Make adjustments.

SDK中为我们提供了判断当前网络环境的Api

1
2
3
4
5
6
7
8
9
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork.getType() != ConnectivityManager.TYPE_WIFI) {
String typeName = activeNetwork.getSubtypeName();
int type = activeNetwork.getSubtype();
switch (type) {
// do the cases
}
}

不同网络环境的基本传输速度如下图所示:


Do It Yourself

然而,即使判断出当前处于诸如LTE的网络环境,依然不能完全保证较高的传输速度,比如,瓶颈可能发生在服务端。

这时就需要主动去测算当前网络延迟了,多次测算后,求平均值。

接着,你可以定义出三个网络状况区间,以60ms、220ms为界

GOOD OK BAD
< 60ms 60ms ~ 220ms > 220ms
更多的预加载,几乎不需要缓存 依赖缓存,拒绝部分网络请求 拒绝大部分网络请求,只加载重要信息

当然,阈值(60ms、220ms)不是固定的。


Tools

在测试时,针对难测的网络环境条件,可以使用一些工具进行延时模拟。


===Ending===