W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
編寫:kesenhoo - 原文:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
所有的網(wǎng)絡(luò)類型(Wi-Fi、3G、2G等)對電量的消耗并不是一樣的。不僅是 Wi-Fi 電波比無線電波的耗電量要少很多,而且不同的無線電波(3G、2G、LTE……)使用的電量也不同。
在大多數(shù)情況下,Wi-Fi 電波會(huì)在使用相對較低電量的情況下提供一個(gè)相對較大的帶寬。因此,我們需要爭取盡量使用 Wi-Fi 來傳遞數(shù)據(jù)。
我們可以使用 Broadcast Receiver 來監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)的變化。當(dāng)切換為 Wi-Fi 時(shí),我們可以進(jìn)行大量的數(shù)據(jù)傳遞操作,例如下載,執(zhí)行定時(shí)的更新操作,甚至是在這個(gè)時(shí)候暫時(shí)加大更新頻率。這些內(nèi)容都可以在前面的課程中找到。
當(dāng)通過無線電進(jìn)行連接的時(shí)候,更大的帶寬通常伴隨著更多的電量消耗。這意味著 LTE(一種4G網(wǎng)絡(luò)制式)會(huì)比 3G 制式更耗電,當(dāng)然比起 2G 更甚。
從 Lesson 1 我們知道了無線電狀態(tài)機(jī)是怎么回事,通常來說相對更寬的帶寬網(wǎng)絡(luò)制式會(huì)有更長的狀態(tài)切換時(shí)間(也就是從 full power 過渡到 standby 有更長一段時(shí)間的延遲)。
同時(shí),更高的帶寬意味著可以更大量的進(jìn)行預(yù)取,下載更多的數(shù)據(jù)。也許這個(gè)說法不是很直觀,因?yàn)檫^渡的時(shí)間比較長,而過渡時(shí)間的長短我們無法控制,也就是過渡時(shí)間的電量消耗差不多是固定了。既然這樣,我們在每次傳輸會(huì)話中為了減少更新的頻率而把無線電激活的時(shí)間拉長,這樣顯的更有效率。也就是盡量一次性把事情做完,而不是斷斷續(xù)續(xù)的請求。
例如:如果 LTE 無線電的帶寬與電量消耗都是 3G 無線電的2倍,我們應(yīng)該在每次會(huì)話的時(shí)候都下載4倍于 3G 的數(shù)據(jù)量,或者是差不多 10Mb(前面文章有說明 3G 一般每次下載 2Mb)。當(dāng)然,下載到這么多數(shù)據(jù)的時(shí)候,我們需要好好考慮預(yù)取本地存儲(chǔ)的效率并且需要經(jīng)常刷新預(yù)取的緩存。
我們可以使用 connectivity manager 來判斷當(dāng)前激活的無線電波,并且根據(jù)不同結(jié)果來修改預(yù)取操作。
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;
}
Ps:想要最大化效率與最小化電量的消耗,需要考慮的東西太多了,通常來說,會(huì)根據(jù) app 的功能需求來選擇有所側(cè)重,那么前提就是需要了解到底哪些對效率的影響比較大,這有利于我們做出最優(yōu)選擇。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: