不耗電傳輸資料(四):基於連線型別改變下載模式
阿新 • • 發佈:2019-01-02
基於連線型別改變下載模式
不同連結型別對電量的消耗並不相同。不單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
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;
}