美文网首页Android知识
BroadcastReceiver学习笔记

BroadcastReceiver学习笔记

作者: fengmlo | 来源:发表于2016-12-18 21:47 被阅读42次

BroadcastReceiver本质是一种全局监听器,它可以监听全局的广播消息。

与Activity和Service不同的是,BroadcastReceiver在接收到匹配的Intent前并不会被激活。激活一个BroadcastReceiver需要以下步骤:

  1. 创建一个匹配的Intent
  2. 调用Context的sendBroadcast() 或 sendOrderedBroadcast()

当Context发出通知后,所有匹配该Intent的BroadcastReceiver都可能被启动。

要实现一个BroadcastReceiver,只需重写它的onReceive方法,同时注册到程序中。
有两种方式注册BroadcastReceiver:

  1. 在AndroidManifest.xml中注册:
<receiver android:name="...">
    <intent-filter>
        <action android:name="...." />
    </intent-filter>
</receiver>
  1. 在程序中注册
IntentFilter filter = new IntentFilter("...");
Receiver receiver = new Receiver();
registerReceiver(receiver, filter);

当对应的广播发出后,系统就会创建对应的BroadcastReceiver实例,并调用它的onReceive方法,该方法执行完后,实例就会被销毁。如果onReceive不能在10秒内执行完成,会触发ANR。若要执行耗时操作,可以启动一个Service,不应启动新线程,很可能线程没执行完,BroadcastReceiver就已经退出了。

广播

广播有两种:

  • Normal Broadcast 普通广播:可以被所有对应的接收者接收到,缺点是不能链式传递且无法终止传播。

  • Ordered Broadcast 有序广播:按预设的优先级(-1000 ~ 1000)依次被接收。上一接收者可以调用setResultExtras(Bundle)将数据存入Broadcast,下一接受者可以调用getResultExtras()将数据取出。有序广播可以被接收者终止,优先级低的接收者将不会接收到该广播。

同样优先级有两种设置方式:

  1. AndroidManifest.xml:
<receiver android:name="...">
    <intent-filter android:priority="0">
  1. 代码中:
intentFilter.setPriority(1000);

相关文章

网友评论

    本文标题:BroadcastReceiver学习笔记

    本文链接:https://www.haomeiwen.com/subject/naupettx.html