Android---基于连接类型来修改下载方案



本文译自:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html

在谈到网络连接对电池电量的影响时,不是所有的连接类型都是一样的。使用Wi-Fi信号不仅可以显著的比其他同等的无线信号节省电量,而且不同的无线信号技术对电量的消耗也是不一样的。

使用Wi-Fi

在大多数情况下,Wi-Fi信号会在明显的较低功耗成本下提供更大的带宽。因此,应该尽可能的在Wi-Fi连接的时候执行数据传输操作。

你可以使用一个广播接收器来监听连接的变化,在有Wi-Fi连接被建立时来执行下载、抢占式的计划内更新、甚至是像“优化电池电量”系统文章中介绍的那样临时增加定期更新的频率。

使用较大的带宽来下载更多的数据从而减少下载频率

在基于无线信号连接的时候,通常较高的带宽会带来较高的电量消耗,这就意味着LTE4G)要比3G消耗更多的电量,而3G2G要消耗更多的电量。

一般而言,基于无线技术的底层信号状态机的变化,特别是状态变化的尾部时间对电池的影响,要比较高的带宽信号的影响要大。

同时,较高的带宽意味你可以在相同的时间之上更加积极的下载更多的数据。当然这不太直观,因为尾部时间的电量消耗较高,所以,用较长的周期的传输会话期间来保持信号的活跃状态,并减少更新的频率。

例如,如果LTE4G)有3G信号的双倍带宽,并要消耗双倍的电量,那么就应该在每个会话期间下载相比3G信号的4G数据,或者是10Mb以上的数据。在下载这些数据时,重点要考虑的是对本地的可用存储空间和定期刷新预处理缓存的影响。

你可以使用连接管理器来判断活跃的无线信号类型,并依此来修改预处理方案:

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;
}

你可能感兴趣的:(Android---基于连接类型来修改下载方案)