一. 廣播發送
1. 發送者分爲兩種:
<1>. 系統廣播,只能由Android系統發出,action的定義以下:
ACTION_TIME_TICK 系統時間已經改變。該事件每分鐘被廣播一次,只能經過動態註冊BroadcastReceiver來響應。
ACTION_TIME_CHANGED 系統時間被設置
ACTION_TIMEZONE_CHANGED 系統時區被改變
ACTION_BOOT_COMPLETED 系統啓動完成
ACTION_PACKAGE_ADDED 新的應用程序被安裝
ACTION_PACKAGE_CHANGED 應用程序被改變
ACTION_PACKAGE_REMOVED 應用程序被卸載
ACTION_PACKAGE_RESTARTED 應用程序被從新啓動
ACTION_PACKAGE_DATA_CLEARED 應用程序數據被清空
ACTION_UID_REMOVED 用戶ID被刪除
ACTION_BATTERY_CHANGED 電量改變
ACTION_POWER_CONNECTED 外接電源被連通
ACTION_POWER_DISCONNECTED 外接電源被斷開
ACTION_SHUTDOWN 系統關閉android
<2>. 用戶自定義廣播
兩種類型:
普通廣播:徹底異步,能夠在同一時刻(邏輯上)被全部接收者接收到,消息傳遞的效率比較高,而且沒法中斷廣播的傳播。經過sendBroadcast(intent)來發送。
有序廣播:廣播接收者將按預先聲明的優先級依次接收Broadcast。在onReceiver()中,廣播不會傳播到下一個接收者,此時當前的廣播接收者能夠abortBroadcast()終止廣播繼續向下傳播,也能夠將intent中的數據進行修改設置,而後將其傳播到下一個廣播接收者。
經過sendOrderedBroadcast()來發送。異步
2. 發送方式:
把要發送的信息和用於過濾的信息(如Action、Category)裝入一個Intent對象,而後調用Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法把Intent對象以廣播方式發送出去。ide
二. 廣播接收:
1. 接收廣播的兩種方式:
<1>.靜態註冊
廣播接收者就是一個常駐在系統中的全局監聽器,不管應用是否處於運行狀態,廣播接收者都是已常常駐在系統中了。
只要調用PackageManager將Receiver禁用就銷燬掉這個廣播接收者。
這種模式適合於這樣的場景:某事件發生 -> 通知Broadcast -> 啓動相關處理應用。
<receiver android:name=".BootBroadcastReceiver" >
<intent-filter>
<!-- 自定義action的命名規則通常建議爲:包名.intent.類名 -->
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>線程
接收器:對象
public class BootBroadcastReceiver extends BroadcastReceiver {
String RECEIVED = "android.intent.action.BOOT_COMPLETED";// action 名稱
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals( RECEIVED )) {
}
}
}生命週期
<2>.動態註冊:
一般是在OnResume事件中經過registerReceiver進行註冊,在 OnPause等事件中經過unregisterReceiver反註冊,經過這種方式使其可以在運行期間保持對相關事件的關注。
若是應用退出後,沒有撤銷已經註冊的接收者應用應用將會報錯。
其模式能夠歸結爲:啓動應用 -> 監聽事件 -> 發生時進行處理。事件
// 定義Action
public static String RECEIVED_ACTION = "android.intent.action.MY_BROADCAST_ACTION";
// 定義接收器
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals( RECEIVED_ACTION )) {
}
}
};
// 註冊接收器
protected void onResume(){
super.onResume();
IntentFilter intentFilter = new IntentFilter( RECEIVED_ACTION );
registerReceiver( myBroadcastReceiver, intentFilter);
}
// 註銷接收器
protected void onPause(){
super.onRause();
unregisterReceiver( myBroadcastReceiver );
}get
// 發送廣播
Intent intent = new Intent();
intent.setAction(RECEIVED_ACTION);
sendBroadcast(intent);it
2. 接收回調方法:
一個BroadcastReceiver能夠處理多個廣播消息,具體作法爲在onReceive()方法調用Intent參數的getAction判斷傳進來的動做,便可進行不一樣的處理。
不要建立子線程處理業務,由於它的生命週期很短。正確的處理方法就是經過intent啓動Activity做爲響應,或者經過NotificationMananger提醒用戶,或者啓動Service等。io
3. 廣播接收的順序: 有序廣播:優先級高的先接收;同優先級的動靜態廣播接收器,動態優先於靜態。普通廣播:無視優先級,動態廣播接收器優先於靜態廣播接收器。