注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。
原文鏈接: http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
不同連接類型對于電池壽命的影響是不一樣的。首先使用Wi-Fi會比使用無線網絡(比如GPRS)消耗的電量小的多。而且不同的通信技術對于電量的影響也是有很大差異的。
一). 使用Wi-Fi
在大多數情況下一個Wi-Fi連接會提供更大的帶框而消耗的電量卻更低。所以說你必須盡量通過Wi-Fi來連接數據。
你可以使用一個廣播接收器來監聽連接狀態的變化。當建立了Wi-Fi連接后,執行大量的數據下載,計劃更新,甚至臨時性地增加計劃更新的頻率。具體的細節可以閱讀 Optimizing Battery Life 課中的 Determining and Monitoring the Connectivity Status 。
二). 使用更大的帶寬,在更低的頻率下去下載更多的數據
當用無線電連接時,更大的帶寬通常意味著更多的電量消耗。所以這就意味著LTE會比3G消耗更多的電量,也比2G的價錢更高。
這意味著雖然底層的無線電狀態機會隨著實現的技術不同而不同,但通常來說,更大帶寬的無線電技術意味著在狀態切換時間階段對電池的影響也會更大。
同時,更高的帶寬意味著你可以預取更多的數據,在同一時間段內下載更多的數據。不太直觀地說,因為尾時間的電池消耗相對而言要更高,所以不如對每一個傳輸數據的會話,保持無線電在活躍的狀態從而減少更新的頻率,這樣可能會效率更高一些。
例如,如果一個LTE網絡和3G網絡相比具有2倍的帶寬和2倍的能量消耗,你應該在每一個會話下載4倍的數據——大約是10mb的數據。當下載了這么多數據后,還需要考慮預取對于本地存儲的影響,并且定期刷新你的預取緩存。
你可以使用 connectivity manager 來確定當前的連接狀態,并相應地修改你的預取策略:
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
;
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

