BroadcastReceiver(广播接收者)
1.什么是BroadcastReceiver
BroadcastReceiver是Android四大组件之一
BroadcastReceiver作为一个监听器,对于App发出的广播做出响应
2.BroadcastReceiver的作用是什么
BroadcastReceiver可以完成Android中不同组件的通信
BroadcastReceiver可以完成Android中不同应用之间的通信(广播可以跨越不同app直接通信)
BroadcastReceiver可以在特殊事件被触发时完成特定的操作(如锁屏被解锁时,电话接听时,网络可用时)
3.BroadcastReceiver的实现原理
整个模型分为三个部分
1.广播发布者:发送广播
2.AMS(Activity Manager Service):根据消息发布者的要求,在已注册列表中寻找适合的消息订阅者。
3.广播接收者:接受广播
4.我该如何使用BroadcastReceiver?
[1]定义一个广播接收者
定义一个类继承BroadcastReceiver
重写onReceive方法
示例代码
private class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
}
}
onReceive方法的作用以及为什么要重写onReceive方法
上面提到过,广播接收者是用来对app发出的广播产生相应
那么当BroadcastReceiver接收到一条对应广播的时候将自动调用onReceive方法
[2]注册广播接收者
注册的方式有两种
1.静态注册
注册方式:在AndroidManifest.xml里通过<receive>标签声明、
当此 App
首次启动时,系统会自动实例化mBroadcastReceiver
类,并注册到系统中。
<receiver android:name=".MyBroadcastReceiver"
>
<intent-filter
>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
2.动态注册
注册方式:在代码中调用Context.registerReceiver()
方法
示例代码
@Override
protected void onResume() {
super.onResume();
//1.实例化broadcastReceiver类和IntentFilter类
MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
//2.设置接受广播类型
intentFilter.addAction("android.intent.action.NEW_OUTGOING_CALL");
//3.调用registerReceiver方法注册广播
registerReceiver(myBroadcastReceiver,intentFilter);
}
注册广播后要销毁广播
示例代码
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(myBroadcastReceiver);
}
对于动态广播 有销毁就有注销 否则会造成内存泄漏
动态注册和静态注册的区别
5.我该如何发送一个广播
广播 是 用”意图(Intent
)“标识
定义广播的本质 = 定义广播所具备的“意图(Intent
)”
广播发送 = 广播发送者 将此广播的“意图(Intent
)”通过sendBroadcast()方法发送出去
6.广播的分类
1.有序广播
2.无序广播