今天,边肖将与您分享关于Android四个组成部分的广播接收器的详细说明。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友就跟着边肖去看看吧。
BroadcastReceiver,在Android的开发中,BroadcastReceiver有很多应用场景,属于Android的四大组件之一。
Android广播分为两个角色:广播发送方和广播接收方。
一、 作用
用于监控/接收应用程序发送的广播消息并做出响应。
应用场景:
不同组件之间的通信(包括不同应用程序内部/之间)
在特定情况下与Android系统通信(例如,当有电话打进来或网络可用时)
多线程通信
二、实现原理
Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。
模型中有3个角色:
消息订户(广播接收器)
消息发布者(广播发布者)
消息中心(AMS,活动管理器服务)
广播接收机通过绑定机制在AMS中注册。
发送方通过绑定机制向AMS发送广播。
根据AMS广播发送方的要求,在注册列表中找到合适的广播接收方(搜索依据:IntentFilter/Permission)。
AMS广播被发送到相应的广播接收机的相应消息循环队列;
广播接收方通过消息循环获得该广播,并在Receive()上回调。
三、广播接收器注册
注册有两种方式:静态注册和动态注册。
静态注册
通过AndroidManifest.xml中的标记来声明它
听筒
//此广播接收器类是mBroadcastReceiver
android:name='。' mBroadcastReceiver '
//用于在网络状态改变时接收广播。
意图过滤器
action Android:name=' Android . net . conn . connectivity _ CHANGE '/
/意图-过滤器
/接收器
这个App第一次启动时,系统会自动实例化mBroadcastReceiver类,并在系统中注册。
静态注册是常驻广播,不受任何组件生命周期的影响。
动态注册
在代码中,通过调用Context的*registerReceiver()方法动态注册BroadcastReceiver。
@覆盖
受保护的void onResume() {
super . on resume();
//实例化BroadcastReceiver的IntentFilter子类
mBroadcastReceiver mBroadcastReceiver=new mBroadcastReceiver();
intent filter intent filter=new intent filter();
//设置接收广播的类型
intent filter . addaction(Android . net . conn . connectivity _ CHANGE);
//调用Context的registerReceiver()方法进行动态注册。
register receiver(mBroadcastReceiver,intent filter);
}
广播注册后,记得在相应位置销毁广播。
也就是说,在onPause()中注销receiver (mbroadcastreceiver)
当此活动被实例化时,MyBroadcastReceiver将在系统中动态注册。
当此活动被销毁时,动态注册的MyBroadcastReceiver将不再接收相应的广播。
@覆盖
受保护的void onPause() {
super . on pause();
//销毁onResume()方法中的广播
unregister receiver(mBroadcastReceiver);
}
注意:
动态广播最好在活动的onResume()中注册,并在onPause()中注销。
原因:
对于动态广播,有注册就要有注销,否则会导致内存泄露。
不允许重复注册和重复注销。
动态注册是非驻留广播,具有灵活性,跟随组件的生命周期变化。
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。