BroadcastReceiver小结

来源:互联网 发布:c语言打印糖果图形 编辑:程序博客网 时间:2024/06/05 21:59

BroadcastReceiver这种组件本质上就是一个全局监听器,用于监听系统全局的广播消息.也因此可以实现系统中不同组件之间的通信


程序启动BroadcastReceiver只需要两部:

  1. 创建需要启动的BroadcastReceiver的Intent
  2. 调用Context的sendBroadcast()或sendOrderedBroadcast()方法启动指定的BroadcastReceiver

指定BroadcastReceiver匹配的Intent有两种方式:

  • 使用代码进行指定,调用BroadcastReceiver的Context的registerReceiver(BroadcastReceiver receiver,IntentFilter filter)方法指定.代码如下:
IntentFilter filter = new IntentFilter("a;dkfj;akfj;aklf");//过滤符号当然是自定义的MyReceiver mRecceiver = new MyReceiver();registerReceiver(receiver,filter);//这一步必须记下来
  • 在清单文件中配置
<receiver android:name=".MyReceiver">    <intent-filter>        <action android:name="a;dkfj;akfj;aklf"/>    </intent-filter></receiver>

不要在BroadcastReceiver的onReceiver()方法里执行一些耗时操作[下载,访问数据库,计算],否则会弹出ANR(application No Response)对话框

如果确实需要,可以考虑通过Intent启动一个Service来完成该操作.因为BroadcastReceiver生命周期很短,可能出现子线程还没有结束,BroadcastReceiver就已经退出了.因此系统可能会在内存紧张时优先结束该进程.这样就会导致你启动的子线程不能执行完成了


Broadcast被分为两种:

  • Normal Broadcast(普通广播):理论上被所有符合条件的接受者同一时刻接收到.优点:效率高.缺点:灵活性差

  • Ordered Broadcast(有序广播):分为优先级接受Broadcast.优先级别声明在<,,i,n,t,e,n,t,-,f,i,l,t,e,r,… ,/>元素的android:priority属性中,数值越大级别越高.取值范围:-1000~1000,也可以调用IntentFileter对象的setPriority()设置优先级别.
    Ordered Broadcast接受者可以终止 Broadcast Intent的传播[abortBroadcast()],后面的接受者就无法接收到.另外,接受者可以将数据传递给下一个接受者
    sendResultExtras(Bundle)
    下一个接受者可以通过代码Bundle bundle = getResultExtras(true),获取上一个接受者存入的数据

0 0
原创粉丝点击