Android四大组件之BroadcastReceiver详解

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android四大组件之BroadcastReceiver详解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

broadcastReceiver(广播接收器),在AndROId开发中,BroadcastReceiver的应用场景非常多,属于Android四大组件之一。

Android 广播分为两个角色:广播发送者、广播接收者

一、 作用

用于监听 / 接收 应用发出的广播消息,并做出响应

应用场景:

  • 不同组件之间通信(包括应用内 / 不同应用之间)
  • 与 Android 系统在特定情况下的通信(如当话呼入时、网络可用时)
  • 多线程通信

二、实现原理

Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。

模型中有3个角色:

  • 消息订阅者(广播接收者)
  • 消息发布者(广播发布者)
  • 消息中心(amS,即ActivITy Manager Service)

广播接收者通过 Binder机制在AMS注册
广播发送者通过 Binder 机制向AMS发送广播
AMS根据广播发送者要求,在已注册列表中,寻找合适的广播接收者(寻找依据:IntentFilter / PErmission)
AMS将广播发送到合适的广播接收者相应的消息循环队列中;
广播接收者通过消息循环拿到此广播,并回调 onReceive()

三、广播接收器注册

注册的方式分为两种:静态注册、动态注册

静态注册

在AndroidManifest.XMl里通过 标签声明

 <receiver  //此广播接收者类是mbroadcastReceiver  android:name=".mBroadcastReceiver" >  //用于接收网络状态改变时发出的广播  <intent-filter>    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />  </intent-filter> </receiver>

当此App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。

静态注册是常驻广播,不受任何组件生命周期的影响

动态注册

在代码中通过调用Context的*registerReceiver()方法进行动态注册BroadcastReceiver

 @override PRotected void onResume() {   super.onResume();   //实例化BroadcastReceiver子类 & IntentFilter   mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();   IntentFilter intentFilter = new IntentFilter();   //设置接收广播的类型   intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);   //调用Context的registerReceiver()方法进行动态注册   registerReceiver(mBroadcastReceiver, intentFilter); }

注册广播后,要在相应位置记得销毁广播

即在onPause() 中unregisterReceiver(mBroadcastReceiver)

当此Activity实例化时,会动态将MyBroadcastReceiver注册到系统中

当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。

 @Override protected void onPause() {   super.onPause();   //销毁在onResume()方法中的广播   unregisterReceiver(mBroadcastReceiver); }

注意:

动态广播最好在Activity的onResume()注册、onPause()注销。

原因

对于动态广播,有注册就必然得有注销,否则会导致内存泄露
重复注册、重复注销也不允许
动态注册是非常驻广播,灵活,跟随组件的生命周期变化。

总结

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android四大组件之BroadcastReceiver详解全部内容,希望文章能够帮你解决Android四大组件之BroadcastReceiver详解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。