关于LocalBroadcastManager的介绍和优势
在Android系統中,BroadcastReceiver的設計初衷就是從全局考慮的,可以方便應用程序和系統、應用程序之間、應用程序內的通信,所以對單個應用程序而言BroadcastReceiver是存在安全性問題的,相應問題及解決如下:
1、當應用程序發送某個廣播時系統會將發送的Intent與系統中所有注冊的BroadcastReceiver的IntentFilter進行匹配,若匹配成功則執行相應的onReceive函數。可以通過類似sendBroadcast(Intent, String)的接口在發送廣播時指定接收者必須具備的permission。或通過Intent.setPackage設置廣播僅對某個程序有效。
2.? 當應用程序注冊了某個廣播時,即便設置了IntentFilter還是會接收到來自其他應用程序的廣播進行匹配判斷。對于動態注冊的廣播可以通過類似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定發送者必須具備的permission,對于靜態注冊的廣播可以通過android:exported="false"屬性表示接收者對外部應用程序不可用,即不接受來自外部的廣播。
?
上面兩個問題其實都可以通過LocalBroadcastManager來解決:
??
Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具類,幫助大家在自己的進程內進行局部廣播發送與注冊,使用它比直接通過sendBroadcast(Intent)發送系統全局廣播有以下幾點好處。
1??? 因廣播數據在本應用范圍內傳播,你不用擔心隱私數據泄露的問題。
2??? 不用擔心別的應用偽造廣播,造成安全隱患。
3??? 相比在系統內發送全局廣播,它更高效。
其使用方法也和正常注冊廣播類似:
?
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | LocalBroadcastManager mLocalBroadcastManager;? ??BroadcastReceiver mReceiver;? ?IntentFilter filter = newIntentFilter();? ?filter.addAction("test");? <PREclass=java name="code"> mReceiver = newBroadcastReceiver() {? ????????????@Override? ????????????publicvoid onReceive(Context context, Intent intent) {? ????????????????if(intent.getAction().equals("test")) {? ????????????????????//Do Something ????????????????} ????????????}? ????????};? </PRE> mLocalBroadcastManager.registerReceiver(mReceiver, filter); <PRE></PRE> <P></P> <PRE></PRE> 當然,和正常廣播一樣,也要在對應的生命周期中反注冊掉: <P></P> <P></P> <P></P> <PREclass=java name="code">@Override protectedvoid onDestroy() { ???super.onDestroy(); ???mLocalBroadcastManager.unregisterReceiver(mReceiver); } </PRE> <P></P> <PRE></PRE> <PRE></PRE> <PRE></PRE> |
總結
以上是生活随笔為你收集整理的关于LocalBroadcastManager的介绍和优势的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于数据库与LoaderManager的
- 下一篇: 关于定时执行任务的解决方法,Pendin