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
为了适应复杂多变的网络环境,必须做下面两件事:
- Gather information.
- Make adjustments.
SDK中为我们提供了判断当前网络环境的Api
1 | ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); |
不同网络环境的基本传输速度如下图所示:
Do It Yourself
然而,即使判断出当前处于诸如LTE的网络环境,依然不能完全保证较高的传输速度,比如,瓶颈可能发生在服务端。
这时就需要主动去测算当前网络延迟了,多次测算后,求平均值。
接着,你可以定义出三个网络状况区间,以60ms、220ms为界
GOOD | OK | BAD |
---|---|---|
< 60ms | 60ms ~ 220ms | > 220ms |
更多的预加载,几乎不需要缓存 | 依赖缓存,拒绝部分网络请求 | 拒绝大部分网络请求,只加载重要信息 |
当然,阈值(60ms、220ms)不是固定的。
Tools
在测试时,针对难测的网络环境条件,可以使用一些工具进行延时模拟。
- Emulator Throttling: http://developer.android.com/tools/devices/emulator.html
- Network Attenuator: http://developer.att.com/developer/legalAgreementPage.jsp?passedItemId=14500040