Android里面的廣播按類型分為兩種:標(biāo)準(zhǔn)廣播和有序廣播桑孩。從應(yīng)用軟件安全角度又分為:系統(tǒng)廣播和本地廣播。 下文主要介紹本地廣播原叮。
本地廣播有以下3個(gè)優(yōu)點(diǎn):
- 發(fā)送的廣播不會(huì)離開(kāi)我們的程序,機(jī)密數(shù)據(jù)不會(huì)泄露。
- 其他的程序無(wú)法將廣播發(fā)送到我們程序的內(nèi)部况木,因此無(wú)安全隱患。
- 發(fā)送本地廣播比發(fā)送系統(tǒng)全局廣播更高效旬迹。
01 LocalBroadcastManager
使用系統(tǒng)提供的LocalBroadcastManager這個(gè)類來(lái)發(fā)送廣播火惊、注冊(cè)和注銷廣播接收器。
- 01 發(fā)送本地廣播
Intent intent = new Intent();
intent.setAction(Constants.ACTION_ACCOUNT_LOGIN_SUCCESS);
//ContextHelper.getContext().sendBroadcast(intent);
//改為發(fā)送本地廣播比發(fā)送系統(tǒng)全局廣播更加安全和高效奔垦。
LocalBroadcastManager.getInstance(ContextHelper.getContext()).sendBroadcast(intent);
- 02 注冊(cè)本地廣播接收器
IntentFilter filter = new IntentFilter();
filter.addAction(Constants.ACTION_ACCOUNT_LOGIN_SUCCESS);
if (mReceiver == null) {
mReceiver = new LoginReceiver();
//getActivity().registerReceiver(mReceiver, filter);
// 注冊(cè)本地廣播接收器
LocalBroadcastManager.getInstance(getContext()).registerReceiver(mReceiver, filter);
}
- 03 注銷本地廣播接收器
@Override
public void onDestroy() {
if (mReceiver != null) {
//getActivity().unregisterReceiver(mReceiver);
// 注銷本地廣播接收器
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mReceiver);
}
super.onDestroy();
}
- 04 LoginReceiver
private class LoginReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do something
}
}