Android四大组件之BroadcastReceiver详解

所属分类: 软件编程 / Android 阅读数: 87
收藏 0 赞 0 分享

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媒体开发之音乐播放器,播放SD卡中的音乐,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android使用Spinner实现城市级联下拉框

这篇文章主要为大家详细介绍了Android使用Spinner实现城市级联下拉框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义scrollView实现顶部图片下拉放大

这篇文章主要为大家详细介绍了Android自定义scrollView实现顶部图片下拉放大,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

android ScrollView实现下拉放大头部图片

这篇文章主要为大家详细介绍了android ScrollView实现下拉放大头部图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义View实现打钩动画功能

本篇文章通过实例给大家分享了Android自定义View实现打钩动画功能的过程和代码分享,有兴趣需要的学习下吧。
收藏 0 赞 0 分享

Android DragImageView实现下拉拖动图片放大效果

这篇文章主要为大家详细介绍了Android DragImageView实现下拉拖动图片放大效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android仿QQ好友详情页下拉顶部图片缩放效果

这篇文章主要为大家详细介绍了Android仿QQ好友详情页下拉顶部图片缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android ListView实现下拉顶部图片变大效果

这篇文章主要为大家详细介绍了Android ListView实现下拉顶部图片变大,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android编程设计模式之工厂方法模式实例详解

这篇文章主要介绍了Android编程设计模式之工厂方法模式,结合实例形式详细分析了Android工厂方法模式的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Android编程设计模式之抽象工厂模式详解

这篇文章主要介绍了Android编程设计模式之抽象工厂模式,结合实例形式详细分析了Android抽象工厂模式的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多