1.广播的概念
BroadCastReceiver (广播) 作为Android四大组件之一,应用场景是很多的,比如:通知,消息提醒,都是基于广播来实现的。
2.广播的类型:
- 自定义广播
- 有序广播
- 系统广播
- App内广播(本地广播)
3.广播的注册方式
a.静态注册
<receiver android:name=".broadCastReceiver.DBroad">
<intent-filter android:priority="500">
<action android:name="com.order.broadcast" />
</intent-filter>
</receiver>
在AndroidManifest.xml文件中进行注册,其中<action>标签下的 name 属性 为启动广播所需的 action 属性
b.动态注册
@Override
protected void onResume() {
super.onResume();
myBroadCastReceiver = new MyBroadCastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION);
registerReceiver(myBroadCastReceiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(myBroadCastReceiver);
}
在使用广播之前进行注册,要主动解除广播注册否则会引起内存泄漏
4.广播的使用方式
a.自定义广播
/**
* 发送自定义广播
*/
private void sendMyBroadCast() {
Intent intent = new Intent();
intent.setAction(ACTION);
sendBroadcast(intent);
}
b.有序广播
/**
* 发送有序广播
*/
private void sendOrderedBroadCast() {
Intent intent = new Intent();
intent.setAction(ACTION);
sendOrderedBroadcast(intent, null);
}
发送有序广播时,需将广播注册时的 <action> 中的 name 值 注册为相同的name,这样才会全部接收到,其中 priority 值 越大越先接收到消息。
c.系统广播
系统广播只需修改系统标记的ACTION即可且只需要在注册广播接收者时定义相关的action即可,不需要手动发送广播,当系统有相关操作时会自动进行系统广播
d.App内广播
/**
* 发送本地广播
*/
private void sendLocalBroadCast() {
myBroadCastReceiver = new MyBroadCastReceiver();
IntentFilter intentFilter = new IntentFilter();
localBroadcastManager = LocalBroadcastManager.getInstance(this);
intentFilter.addAction(ACTION);
localBroadcastManager.registerReceiver(myBroadCastReceiver, intentFilter);
Intent intent = new Intent();
intent.setAction(ACTION);
localBroadcastManager.sendBroadcast(intent);
}
App内广播为本地广播,其安全且效率高。由于Android系统中广播为统一管理,可能存在不安全的情况。