不耗电传输数据(四):基于连接类型改变下载模式

基于连接类型改变下载模式

不同连结类型对电量的消耗并不相同。不单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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值