Android 按需操控BroadcastReceiver

2018-08-02 18:27 更新

編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/manifest-receivers.html

監(jiān)測(cè)設(shè)備狀態(tài)變化最簡(jiǎn)單的方法,是為你所要監(jiān)聽的每一個(gè)狀態(tài)創(chuàng)建一個(gè)BroadcastReceiver,并在Manifest文件中注冊(cè)它們。之后就可以在每一個(gè)BroadcastReceiver中,根據(jù)當(dāng)前設(shè)備的狀態(tài)調(diào)整一些計(jì)劃任務(wù)。

上述方法的副作用是:一旦你的接收器收到了廣播,應(yīng)用就會(huì)喚醒設(shè)備。喚醒的頻率可能會(huì)遠(yuǎn)高于需要的頻率

更好的方法是在程序運(yùn)行時(shí)開啟或者關(guān)閉BroadcastReceiver。這樣的話,你就可以讓這些接收器僅在需要的時(shí)候被激活。

切換是否開啟接收器以提高效率

我們可以使用PackageManager來(lái)切換任何一個(gè)在Mainfest里面定義好的組件的開啟狀態(tài)。通過(guò)下面的方法可以開啟或者關(guān)閉任何一個(gè)BroadcastReceiver:

ComponentName receiver = new ComponentName(context, myReceiver.class);

PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)

使用這種技術(shù),如果我們確定網(wǎng)絡(luò)連接已經(jīng)斷開,那么可以在這個(gè)時(shí)候關(guān)閉除了監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化的接收器之外的其它所有接收器。

相反的,一旦重新建立網(wǎng)絡(luò)連接,我們可以停止監(jiān)聽網(wǎng)絡(luò)連接的改變,而僅僅在執(zhí)行需要聯(lián)網(wǎng)的操作之前判斷當(dāng)前網(wǎng)絡(luò)是否可以用。

同樣地,你可以使用上面的技術(shù)來(lái)暫緩一個(gè)需要更高帶寬的下載任務(wù)。這僅需要啟用一個(gè)監(jiān)聽網(wǎng)絡(luò)連接變化的BroadcastReceiver,并在連接到Wi-Fi時(shí),初始化下載任務(wù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)