標籤:gis MF 開發 manager 線程 manage check 方法 str
一. BroadcastReceiver 使用情境
Broadcast主要是用作訊息通訊(專業術語叫IPC),Android的IPC基本都是binder來實現,那麼這裡的BroadcastReceiver其實也是對binder的一個封裝,方便上層調用。開發過程中遇到的單進程多線程通訊的情境比較多,所以這種情況下使用Broadcast並不是最佳選擇,很多人會自己實現一套 Observer 或者使用EventBus等第三方庫來完成該功能,不可否認,他們在這種場合下不論是效率還是靈活性方面都更具優勢。但是,BroadcastReceiver既然能夠在Android四大組件中佔有一席之地,自然也有它專屬的優勢,第一個是系統相關事件的監聽,比如開機啟動,網路連接,電量變化等,第二個是多進程通訊,這些是Observer 或者EventBus很難辦到的。所以BroadcastReceiver的使用需要看具體的使用情境,像單進程多線程這種情境,就不建議用BroadcastReceiver了,有種殺雞用牛刀的趕腳,使用Observer 或者EventBus更適合;但是對於需要監聽系統廣播事件的場合,比方說現在很多進程保活機制裡面就用到了一些系統廣播的監聽,就正是BroadcastReceiver大展拳腳的時候了。
二.BroadcastReceiver 系統廣播
Android中內建了多個系統廣播:只要涉及到手機的基本操作(如開機、網路狀態變化、拍照等等),都會發出相應的廣播。每個廣播都有特定的Intent - Filter(包括具體的action),Android系統廣播action如下:
| 系統操作 |
action |
| 監聽網路變化 |
android.net.conn.CONNECTIVITY_CHANGE |
| 關閉或開啟飛航模式 |
Intent.ACTION_AIRPLANE_MODE_CHANGED |
| 充電時或電量發生變化 |
Intent.ACTION_BATTERY_CHANGED |
| 電池電量低 |
Intent.ACTION_BATTERY_LOW |
| 電池電量充足(即從電量低變化到飽滿時會發出廣播 |
Intent.ACTION_BATTERY_OKAY |
| 系統啟動完成後(僅廣播一次) |
Intent.ACTION_BOOT_COMPLETED |
| 按下照相時的拍照按鍵(硬體按鍵)時 |
Intent.ACTION_CAMERA_BUTTON |
| 螢幕鎖屏 |
Intent.ACTION_CLOSE_SYSTEM_DIALOGS |
| 裝置當前設定被改變時(介面語言、裝置方向等) |
Intent.ACTION_CONFIGURATION_CHANGED |
| 插入耳機時 |
Intent.ACTION_HEADSET_PLUG |
| 未正確移除SD卡但已取出來時(正確移除方法:設定–SD卡和裝置記憶體–卸載SD卡) |
Intent.ACTION_MEDIA_BAD_REMOVAL |
| 插入外部儲存裝置(如SD卡) |
Intent.ACTION_MEDIA_CHECKING |
| 成功安裝APK |
Intent.ACTION_PACKAGE_ADDED |
| 成功刪除APK |
Intent.ACTION_PACKAGE_REMOVED |
| 重啟裝置 |
Intent.ACTION_REBOOT |
| 螢幕被關閉 |
Intent.ACTION_SCREEN_OFF |
| 螢幕被開啟 |
Intent.ACTION_SCREEN_ON |
| 關閉系統時 |
Intent.ACTION_SHUTDOWN |
| 重啟裝置 |
Intent.ACTION_REBOOT |
三.BroadcastReceiver 註冊方式1.靜態註冊
AndroidManifest.xml:<receiver android:name=".broadcastreceiver.TestBroadcastReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter></receiver>
2.動態註冊
IntentFilter mFilter = new IntentFilter(); mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); TestBroadcastReceiver mReceiver = new TestBroadcastReceiver(); registerReceiver(mReceiver, mFilter);
Android 四大組件 (三) BroadcastReceiver 介紹