-
廣播介紹
-
廣播注冊
-
本地廣播
- 廣播介紹
在Android中,Broadcast是一種廣泛運用的在應用程序之間傳輸信息的機制。在Android中我們要發送的廣播內容是一個Intent(攜帶傳送的數據)。通過注冊一個BroadCastReceiver來接收廣播,只有發送廣播的action和接收廣播的action相同,接收者才能接收這個廣播。
1)有序廣播
有序廣播則是一種同步執行的廣播,在廣播發出之后,同一時刻只會有一個廣播接收器能夠接受到這條廣播,當這個接收器中的邏輯執行完畢后,廣播才會繼續傳遞。優先級高的廣播先收到這個廣播消息,并且前面的廣播接收器還可以截斷正在傳遞的廣播。
sendOrderBroadcast abortBroadcast##
2)標準廣播
標準廣播是一種完全異步執行的廣播,在廣播發出后,所有的廣播接收器幾乎都會在同一時刻接收到這條廣播信息,因此它們之間沒有任何先后順序可言。這種廣播的效率會比較高,但同時也意味著踏實無法被截斷的。
sendBroadcast##
- 注冊廣播
動態注冊方式
優點:靈活,自由控制注冊與注銷
缺點:必須在程序啟動之后才能接收到廣播
1.實現一個ReceiveBroadcast類,繼承BoardcastReceiver并實現onReceive方法,這樣當廣播被接收到后就會執行這個方法。
public class RegisterListener implements OnClickListener {
@Override
public void onClick(View v) {
ReceiveBoardcast receiveBoardcast = new ReceiveBoardcast();
IntentFilter filter = new IntentFilter();
filter.addAction("XXX");
registerReceiver(receiveBoardcast, filter);
}
}
public class ReceiveBoardcast extends BroadcastReceiver {
@Override
public void onReceive(Content cxt, Intent intent) {
String message = intent.getStringExtra("data");
}
}
//取消廣播
unregisterReceiver(receiveBoardcast);
2.sendBroadcast方法發送廣播
Intent intent = new Intent();
intent.putExtra("data", "ssss");
intent.setAction("XXX");
sendBroadcast(intent);
靜態注冊方式
優點:程序未啟動情況下就可以接收廣播
缺點:
配置文件方式,適合你的程序需要長期監測某個廣播的情形,比如監測用戶的短信。
1.新建一個廣播接收者,繼承BoardcastReceiver并實現onReceive方法。
2.在AndroidManfest.xml清單文件里實現注冊
<receiver android:name="XXX">
<intent-filter>
<action android:name="com.xxx" />
</intent-filter>
</receiver>
注意:不要在onReceive方法中添加過多的邏輯或者進行任何耗時的操作,廣播接收器中是不允許開啟線程的當onReceive方法運行較長時間而沒有結束時,程序就會報錯。因此,廣播接收器更多的是扮演一種##打開其他組件的角色##,比如創建一條狀態欄通知等。
- 本地廣播
LocalBroadcastManager local = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("xxx");
local.sendBroadcast(intent);
注意:本地廣播是無法通過靜態注冊方式來接收的。發送本地廣播時應用程序肯定是已經啟動了。
優勢:
1.可以明確知道正在發送的廣播不會離開我們的程序,不用擔心機密數據泄漏問題。
2.其他的程序無法將廣播發送到我們程序的內部,一次不需要擔心有安全漏洞的隱患。
3.發送本地廣播比起發送系統全局廣播會更加高效