当前位置: 移动技术网 > IT编程>移动开发>Android > Android四大组件之BroadcastReceiver详解

Android四大组件之BroadcastReceiver详解

2019年07月29日  | 移动技术网IT编程  | 我要评论

青蛇勾魂,游千惠,誓鸟txt下载

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()注销。

原因:

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对移动技术网的支持。如果你想了解更多相关内容请查看下面相关链接

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网