Android四大組件分別為:1.活動(dòng)Activity,2.服務(wù)Service,3.廣播接收器Broadcast Receiver,4.內(nèi)容提供器Content Provider
在我之前的博客中寫過廣播的概念與基礎(chǔ)用法,Android基礎(chǔ)-四大組件之Broadcast廣播(基礎(chǔ)).
為什么要用本地廣播?
但是那篇博客只是對廣播的初步了解,案例中發(fā)送的自定義廣播屬于系統(tǒng)全局廣播,即發(fā)出的廣播可以被其他任何app接受到,當(dāng)然我們也可以接受別的app發(fā)送的廣播,但是這就涉及到安全性問題了,萬一廣播里包含一些比較重要的數(shù)據(jù)呢?這樣的廣播容易被其他app獲取,而且之前博客定義過的廣播接收器也會(huì)接收到其他app發(fā)來的對我們沒有用處的垃圾廣播。
總結(jié)就兩點(diǎn):
①傳遞數(shù)據(jù)不安全,容易泄露
②廣播接收器會(huì)接受無用的廣播
為了解決這一問題,就需要使用安卓自帶的本地廣播了。
本地廣播的特點(diǎn)
①本地廣播只能在app內(nèi)部進(jìn)行傳遞——>解決問題一
②廣播接收器只能接受app內(nèi)部發(fā)出的廣播——>解決問題二
也正是因?yàn)榍懊鎯蓚€(gè)特點(diǎn)所以使得本地廣播有了下面這個(gè)特點(diǎn):
③發(fā)送本地廣播比全局廣播效率更高更安全。
除此之外,還有一個(gè)用法上的需要注意的地方:
④本地廣播不能通過靜態(tài)注冊來接收
原因是因?yàn)殪o態(tài)注冊本身是為了讓程序未啟動(dòng)的情況下也能收到廣播,而發(fā)送本地廣播時(shí)程序已經(jīng)啟動(dòng),因此不需要靜態(tài)注冊此功能。
本地廣播的代碼實(shí)現(xiàn)
使用LocalBroadcastManager對廣播進(jìn)行管理,其他寫法基本和之前發(fā)送系統(tǒng)全局廣播是一致的。
具體之前的寫法可參考:
Android基礎(chǔ)-四大組件之Broadcast廣播(基礎(chǔ)).
區(qū)別:
①使用LocalBroadcastManager實(shí)例對象的registerReceiver(myReceiver,intentFilter)方法來注冊本地廣播,
②使用localBroadcastManager實(shí)例對象的sendBroadcast(intent)方法來發(fā)送本地廣播。
舉個(gè)栗子:
intentFilter = new IntentFilter();
intentFilter.addAction("myAction");
myReceiver=new MyReceiver();
//本地廣播
localBroadcastManager =localBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(myReceiver,intentFilter);//注冊本地廣播
Intent intent =new Intent("myAction");
localBroadcastManager.sendBroadcast(intent);
同樣,記得在onDestroy中取消注冊本地廣播。
@Override
protected void onDestroy() {
super.onDestroy();
//取消注冊
unregisterReceiver(myReceiver);
//取消注冊本地廣播
localBroadcastManager.unregisterReceiver(myReceiver);
}