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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章