在某些場景下,應用內部進行資料傳遞需要使用到廣播。使用廣播進行資料傳遞必須注意以下幾點:
1、 應用傳送某個廣播時,系統會將廣播中的intent與系統中所有註冊的broadcastreceiver進行匹配,如果能匹配成功則呼叫相關的onreceive函式進行處理。
這裡存在2個問題:
a、效能問題。每個廣播都會與所有broadcastreceiver進行匹配。
b、安全問題。廣播發出去的資料可能被其他應用監聽。
解決方式:
a、通過intent.setpackage指定包名,該廣播只會被指定應用接收
b、設定許可權。指定廣播的接收者必須具備對應的permission。
2、 當應用註冊了broadcastreceiver之後,用來接收的廣播。
這裡也存在2個問題:
a、效能問題。系統有廣播傳送時會被用來與廣播進行匹配判斷。
b、安全問題。外界可以通過傳送大量指定action的方式進行暴力攻擊。
解決方式:
a、動態註冊的broadcastreceiver可以設定傳送者必須擁有指定的許可權才能給它傳送廣播。
b、靜態註冊的廣播可以設定android:exported="false"來表示對外不可見,不接收外部廣播。
當廣播僅限於應用內部進行傳遞時,上面的問題都可以使用localbroadcastmanager來解決。
android v4 相容包提供localbroadcastmanager工具類,可以通過它來進行程序內的廣播註冊與傳送,相比sendbroadcast(intent)傳送全域性廣播有如下好處:
1、 localbroadcastmanager傳送的廣播只會在本應用內進行傳遞,不會存在隱私資料洩露的風險。
2、 不用擔心外部偽造廣播進行暴力攻擊。
3、 更高效。
使用方式如下:
private localbroadcastmanager mlocalbroadcastmanager = localbroadcastmanager.getinstance(context);
public void sendlocalbroadcast(context context)
public void registerlocalbroadcastreceiver(context context)
public void unregisterlocalbroadcastreceiver(context context)
android 廣播的使用
1.broadcastreceive,廣播,android四大元件之一,顧名思義,只要發出了這個廣播,在這個頻率上就可以接受到這個廣播。2.廣播主要用於訊息通訊,可以用於不同的元件,不同的頁面,只要一方發出一方接收,就可以得到廣播,獲取資訊。廣播類屬於觀察者模式,極大程度的解耦了程式,只需要在一處發...
android 廣播的使用
android 廣播的使用 在activity中,註冊廣播的乙個demo。總共分3步 第一步 定義乙個broadcastreceiver廣播接收類 private broadcastreceiver mbroadcastreceiver new broadcastreceiver 第二步 註冊該廣播...
android廣播的使用
在activity中,註冊廣播的乙個demo。總共分3步 第一步 定義乙個broadcastreceiver廣播接收類 view plain private broadcastreceiver mbroadcastreceiver new broadcastreceiver 第二步 註冊該廣播 vi...