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以作为动作的指定权限对象
例如:
代码注册
注意:BroadcastReceiver生命周期只有十秒左右
在BroadcastReceiver里不能做一些比较耗时的操作
应该通过发送Intent给Service,有Service来完成
不能使用子线程
广播种类
普通广播(Normal broadcasts)
所有监听该广播的广播接受则都可以监听到该广播
有序广播(Ordered broadcasts)
按照接收者的优先级顺序接收广播,优先级别在intent-filter中的
priority中声明,-1000到1000之间,值越大,优先级越高。可以
终止广播意图的继续传播。接受者可以篡改内容
异步广播(粘滞性滞留广播)
不能将处理结果穿个下一个接收者,无法终止广播
普通广播特点:
同级别接收先后是随机的(无序)
级别低的收到广播
接收器不能截断广播的继续传播也不能处理广播
同级别动态注册高于静态注册
有序广播特点
同级别接收顺序是随机的
能截断广播的继续传播,高级别的广播接收器受到该广播后,可以决定是否把该广播截断
接收器能截断广播的继续传播,也能处理广播
同级别的动态这次高于静态注册
动态注册的广播在结束后要卸载掉
可以在onDestroy中执行
unregisterReceiver(receiver);
如果不卸载还是会出问题的
模板代码:http://pan.baidu.com/s/1sjoRQm5
可以作为组件内部类也可以外部类
是一种广泛运用在应用程序之间传输信息的机制
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
可以作为组件内部类也可以外部类
相关文章推荐
- 实现jQuery扩展总结
- 2015-08-13NOIP模拟赛
- iOS UIPopoverView的使用
- Fragment的知识总结
- Redis对于key的操作命令
- java netty socket库和自定义C#socket库利用protobuf进行通信完整实例
- TCP/IP详解学习笔记
- Linq的join后面跟多个条件
- 如何利用OpenCV自带的haar training程序训练分类器
- HDU 5387 Clock // 模拟
- 如何在一家大公司里受到重用
- 递归全排列
- 全网最全ASP.NET MVC 教程汇总
- java 中的异步回调
- 人民币阿拉伯数字转中文大写
- html学习笔记(15)
- 黑马程序员———正则表达式及其其他类
- 面向设计的半封装web组件开发(概要版)
- OpenCV训练分类器制作xml文档
- HDU 1237 简单计算器