您的位置:首页 > 其它

BroadcastReceiver的简单使用

2015-08-13 23:31 232 查看
1.Broadcast(广播)

是一种广泛运用在应用程序之间传输信息的机制

2.BroadcastReceiver(广播接收者)

是对发送过来的广播进行过滤接受并响应的一类组建,他就是用来接收

来自系统和应用的广播

3.用途

当开机完成后系统会产生一条广播(开机的自动启动)

当网络状态改变时系统会产生一条广播(中端数据保存)

电池电量改变时,系统也会发广播

这样设计的作用 大大减少开发的工作量和开发周期

作为应用开发者,只需掌握BroadcastReceiver

使用方法:

发送:吧信息装入一个Intent对象(如Action Category)

通过调用相应的方法将Intent对象以广播的方式发送出去

sendBroadcast()

sendOrderBroadcast()

sendStickyBroadcast()

接收:当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter

是否与发送的Intent像匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法

所以但我们定义一个BroadcastReceiver的是后,都需要实现onReceiver()方法

注意:BroadcastReceiver需要注册

静态注册

在清单文件中类似Activity的注册

不过要注意的是不只是仅仅的name

还要有action以作为动作的指定权限对象

例如:

<receiver android:name=".BC2">
<intent-filter >
<action android:name="BC_One"></action>
</intent-filter>
</receiver>


代码注册

//动态创建广播接收器,动态创建优先于静态创建
IntentFilter intentFilter=new IntentFilter("BC_One");//参数是action响应
BC2 bc2=new BC2();
registerReceiver(bc2,intentFilter);//第一个是接收器的名字,第二个是过滤器的名字


注意:BroadcastReceiver生命周期只有十秒左右

在BroadcastReceiver里不能做一些比较耗时的操作

应该通过发送Intent给Service,有Service来完成

不能使用子线程

广播种类

普通广播(Normal broadcasts)

<pre name="code" class="java">启动:<span style="font-family: Arial, Helvetica, sans-serif;">sendBroadcast(intent);</span>




所有监听该广播的广播接受则都可以监听到该广播
有序广播(Ordered broadcasts)

启动:<span style="font-family: Arial, Helvetica, sans-serif;">sendOrderedBroadcast(intent,null);</span>


按照接收者的优先级顺序接收广播,优先级别在intent-filter中的

priority中声明,-1000到1000之间,值越大,优先级越高。可以

<pre name="code" class="html">       <receiver android:name=".BC1">
<intent-filter
android:priority="100">  数值在-1000到1000之间
<action android:name="BC_One"></action>
</intent-filter>
</receiver>




终止广播意图的继续传播。接受者可以篡改内容
异步广播(粘滞性滞留广播)

启动:sendStickyBroadcast(intent);


不能将处理结果穿个下一个接收者,无法终止广播

普通广播特点:

同级别接收先后是随机的(无序)

级别低的收到广播

接收器不能截断广播的继续传播也不能处理广播

同级别动态注册高于静态注册

有序广播特点

同级别接收顺序是随机的

能截断广播的继续传播,高级别的广播接收器受到该广播后,可以决定是否把该广播截断

接收器能截断广播的继续传播,也能处理广播

同级别的动态这次高于静态注册

动态注册的广播在结束后要卸载掉

可以在onDestroy中执行

unregisterReceiver(receiver);

如果不卸载还是会出问题的

@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(bc3);
}


模板代码:http://pan.baidu.com/s/1sjoRQm5

可以作为组件内部类也可以外部类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: