基于连接类型改变下载模式
不同连结类型对电量的消耗并不相同。不单WiFi比无线网络耗电量小的多,不同技术下的无线网络耗电量也不同。
用WiFi
多数情况下,WiFi网络能够提供更大带宽并大量减少耗电。所以如果WiFi可用,尽量使用WiFi传输数据。
你可以用BroadcastReceiver监听连接的改变,当WiFi连接可用的时候,执行大量数据下载,调度更新,甚至临时增加更新频率。
带宽和数据量更大时降低联网频率
当连接到无线网络是,更大的带宽往往意味着更高的耗电量。也就是说典型的LTE要比3G网更耗电,也更贵。
尽管不同的网络有不同的状态机,总体来说,更宽的带宽意味着状态机超时时间更长。
同时,更高的带宽意味着同样时间内,能预取和下载更多数据。因为超时时间相对更长,所以降低更新频率而更长时间的保持一个连接更高效些。
例如,如果LTE带宽和能耗都是3G网的两倍,那么你应该在一个会话中下载四倍于3G网的数据,也就是大约10兆字节。下载这么大的数据量,考虑本地缓冲预取的效率和定期刷新缓冲区就变得很重要。
你可以用ConnectivityManager确定连接类型,并相应调整预取程序:
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager tm =
(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE;
switch (activeNetwork.getType()) {
case (ConnectivityManager.TYPE_WIFI):
PrefetchCacheSize = MAX_PREFETCH_CACHE; break;
case (ConnectivityManager.TYPE_MOBILE): {
switch (tm.getNetworkType()) {
case (TelephonyManager.NETWORK_TYPE_LTE |
TelephonyManager.NETWORK_TYPE_HSPAP):
PrefetchCacheSize *= 4;
break;
case (TelephonyManager.NETWORK_TYPE_EDGE |
TelephonyManager.NETWORK_TYPE_GPRS):
PrefetchCacheSize /= 2;
break;
default: break;
}
break;
}
default: break;
}