Android 優化電池使用時間——確定和檢測網路狀態
原文參見 此處
確定和監控網路連線狀態
重複提醒和後臺服務最常見的用途之一,就是為來自網際網路資源的應用資料、快取資料安排定期更新或執行長時間執行的下載任務。但是,如果您沒有連線網際網路,或因連線過慢而無法完成下載,那就根本沒必要喚醒裝置並安排更新了。
您可以使用 ConnectivityManager 檢視是否確實已連線網際網路,如果已連線,您還可以瞭解當前的連線型別。
確定是否已連線網際網路
如果裝置未連線網際網路,就沒有必要根據網際網路資源安排更新了。以下程式碼段說明如何使用 ConnectivityManager 查詢有效網路並確定該網路是否已連線網際網路。
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork.isConnectedOrConnecting();
確定網際網路連線的型別
您也可以確定當前可用的網際網路連線的型別。
通過移動資料、WiMAX、Wi-Fi 和乙太網連線可提供裝置連線。您可以查詢有效網路的型別(具體如下所示),以便根據可用頻寬調整重新整理頻率。
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
移動資料的費用往往比 Wi-Fi 高很多,因此在大多數情況下,如果您使用的是移動連線,就應降低應用更新頻率。同樣,在沒有 Wi-Fi 連線的情況下,您就應暫停較大的下載任務。
停用更新後,請務必偵聽連線情況的變化,以便在建立網際網路連線後恢復更新。
監控連線情況的變化
只要連線的具體情況發生變化,ConnectivityManager 就會廣播 CONNECTIVITY_ACTION (“android.net.conn.CONNECTIVITY_CHANGE”) 操作。您可以在清單中註冊廣播接收器,以便偵聽這些變化並相應地恢復(或暫停)後臺更新。
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
裝置連線情況的變化可能會非常頻繁,只要您在移動資料和 Wi-Fi 之間相互切換,系統就會觸發此廣播。因此比較合適的做法是,僅當之前暫停了更新或下載時才監控此廣播,以便恢復更新或下載。通常,您只需在開始更新前檢查網際網路連線情況即可,如果未連線網際網路,請暫停後續更新,直到連線恢復。
此技巧需要切換您在清單中宣告的廣播接收器,具體說明請見下一教程。