BroadcastReciver
## 作用
用于应用程序之间的通信,能够跨进程。
使用场景
- 手机的电量改变发送的广播事件为特定广播接收者接收并处理相应过程
- 手机网络情况改变
- 手机通信情况改变等
使用
针对系统广播事件
-
注册BroadcastReciver
-
动态注册
registerReceiver(BroadcastReciver receiver, IntentFilter filter);
//使用完动态注册 必须手动解除注册状态 一般在onDestory
// -
静态注册(mainifest.xml文件)
<receiver android:name="receiver">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
</intent-filter>
</receiver>- 对于静态注册的广播接收器不受任何组件的生命周期影响,当应用程序关闭时,对应广播一来,程序会被唤醒处理广播。该广播接收器是常驻内存的,比较耗电。
- 动态注册的广播接收器则与之相反,生命周期可以由程序员掌控。
- BroadcastReciver是运行在UI线程中的也就是说在其onRecive中不能处理长时间的工作,或则造成UI的卡顿等错误状况。
-
-
重写onRecive()方法处理相应的广播事件
final BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// action = android.intent.action.BATTERY_CHANGED
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int current = intent.getExtras().getInt("level");
int total = intent.getExtras().getInt("scale");
int value = current * 100 / total;
text.setText("当前电量是" + value + "%" + "");
}
}
};
自定义广播内容
在需要广播的地方sendBroadcast(intent); 创建Intent对象并且设置Action (Action可以为系统的或自定义的)和 data。
Intent intent = new Intent(); |
样例
针对电量改变广播事件处理Demo
final BroadcastReceiver receiver = new BroadcastReceiver() { |
广播分类
广播 | 使用 | 特点 |
---|---|---|
有序广播(Ordered Broadcast) | sendOrderedBroadcast(intent); | 按照广播接收器的先后顺序先后接收消息,先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播 setResult getResult abort设置,截取,中端广播消息 |
无序广播 | sendBroadcast(intent); | 广播接收器没有先后顺序,没有那个广播接收器可以截断更改或者中断广播消息。 |
本地广播 | LocalBroadcastManager l= LocalBroadcastManager.getInstance(this);l.sendBroadcast(intent); | 本地广播限制只能本应用程序发送和接收广播消息。 |
+ 有序广播无序广播还是系统的广播都是全局性的广播,即发出的广播可以被其他任何应用程序接收到.
+ 本地广播只能被动态注册,不能静态注册。动态注册或方法时需要用到LocalBroadcastManager。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 noticase!
评论
ValineLivere