Android 优化电池使用时间——确定和检测网络状态
原文參見 此處
確定和監(jiān)控網(wǎng)絡(luò)連接狀態(tài)
重復(fù)提醒和后臺服務(wù)最常見的用途之一,就是為來自互聯(lián)網(wǎng)資源的應(yīng)用數(shù)據(jù)、緩存數(shù)據(jù)安排定期更新或執(zhí)行長時間運行的下載任務(wù)。但是,如果您沒有連接互聯(lián)網(wǎng),或因連接過慢而無法完成下載,那就根本沒必要喚醒設(shè)備并安排更新了。
您可以使用 ConnectivityManager 查看是否確實已連接互聯(lián)網(wǎng),如果已連接,您還可以了解當(dāng)前的連接類型。
確定是否已連接互聯(lián)網(wǎng)
如果設(shè)備未連接互聯(lián)網(wǎng),就沒有必要根據(jù)互聯(lián)網(wǎng)資源安排更新了。以下代碼段說明如何使用 ConnectivityManager 查詢有效網(wǎng)絡(luò)并確定該網(wǎng)絡(luò)是否已連接互聯(lián)網(wǎng)。
ConnectivityManager cm =(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();確定互聯(lián)網(wǎng)連接的類型
您也可以確定當(dāng)前可用的互聯(lián)網(wǎng)連接的類型。
通過移動數(shù)據(jù)、WiMAX、Wi-Fi 和以太網(wǎng)連接可提供設(shè)備連接。您可以查詢有效網(wǎng)絡(luò)的類型(具體如下所示),以便根據(jù)可用帶寬調(diào)整刷新頻率。
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;移動數(shù)據(jù)的費用往往比 Wi-Fi 高很多,因此在大多數(shù)情況下,如果您使用的是移動連接,就應(yīng)降低應(yīng)用更新頻率。同樣,在沒有 Wi-Fi 連接的情況下,您就應(yīng)暫停較大的下載任務(wù)。
停用更新后,請務(wù)必偵聽連接情況的變化,以便在建立互聯(lián)網(wǎng)連接后恢復(fù)更新。
監(jiān)控連接情況的變化
只要連接的具體情況發(fā)生變化,ConnectivityManager 就會廣播 CONNECTIVITY_ACTION (“android.net.conn.CONNECTIVITY_CHANGE”) 操作。您可以在清單中注冊廣播接收器,以便偵聽這些變化并相應(yīng)地恢復(fù)(或暫停)后臺更新。
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>設(shè)備連接情況的變化可能會非常頻繁,只要您在移動數(shù)據(jù)和 Wi-Fi 之間相互切換,系統(tǒng)就會觸發(fā)此廣播。因此比較合適的做法是,僅當(dāng)之前暫停了更新或下載時才監(jiān)控此廣播,以便恢復(fù)更新或下載。通常,您只需在開始更新前檢查互聯(lián)網(wǎng)連接情況即可,如果未連接互聯(lián)網(wǎng),請暫停后續(xù)更新,直到連接恢復(fù)。
此技巧需要切換您在清單中聲明的廣播接收器,具體說明請見下一教程。
總結(jié)
以上是生活随笔為你收集整理的Android 优化电池使用时间——确定和检测网络状态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 优化电池使用时间——确定
- 下一篇: Android 优化电池使用时间——根据