BroadcastReceiver
2016-05-08 21:16
246 查看
1.Broadcast(广播)
是一种广泛运用的在应用程序之间传输信息的机制
2.BroadcastReceiver(广播接收者)
是对发送出来的广播进行过滤接收并响应的一类组件,他就是用来接收来自系统和应用中的广播
3.用途:
. 当开机完成后系统会产生一条广播
. 当网络状态改变时系统会产生一条广播
. 当电池电量改变时,系统会产生一条广播
发送:
. 把信息装入一个Intent对象(如Action、Category)
. 通过调用相应的方法将Intent对象以广播方式发送出去
. sendBroadcast()
. sendOrderBroadcast()
. sendStickyBroadcast()
接收:
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。
所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。
BroadcastReceiver生命周期只有十秒左右
在BroadcastReceiver里不能做一些比较耗时的操作
应该通过发送Intent给Service,由Service来完成
不能使用子线程
动态注册:onCreate()方法中注册
静态注册:在配置文件中注册
普通广播特点:
同级别接收先后是随机的(无序)
级别低的后收到广播(intent-filter中android:priority="")
接收器不能截断广播的继续传播也不能处理广播(abortBroadcast())
同级别动态注册高于静态注册
有序广播特点:
同级别的接收顺序是随机的
能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否截断该广播
接收器能截断广播的继续传播,也能处理广播
同级别动态注册高于静态注册
Bundle传递数据:
Bundle bundle = new Bundle();
bundle.putString("test", "data");
setResultExtras(bundle);
Bundle bundle = getResultExtras(true);
String s2 = bundle.getString("test");
动态注册要记得销毁
在onDestroy方法中
unregisterReceiver()
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
是一种广泛运用的在应用程序之间传输信息的机制
2.BroadcastReceiver(广播接收者)
是对发送出来的广播进行过滤接收并响应的一类组件,他就是用来接收来自系统和应用中的广播
3.用途:
. 当开机完成后系统会产生一条广播
. 当网络状态改变时系统会产生一条广播
. 当电池电量改变时,系统会产生一条广播
发送:
. 把信息装入一个Intent对象(如Action、Category)
. 通过调用相应的方法将Intent对象以广播方式发送出去
. sendBroadcast()
. sendOrderBroadcast()
. sendStickyBroadcast()
接收:
当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。
所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。
BroadcastReceiver生命周期只有十秒左右
在BroadcastReceiver里不能做一些比较耗时的操作
应该通过发送Intent给Service,由Service来完成
不能使用子线程
动态注册:onCreate()方法中注册
IntentFilter intentFilter = new IntentFilter("BC_One"); BC2 bc2 = new BC2(); registerReceiver(bc2, intentFilter);
静态注册:在配置文件中注册
<receiver android:name="com.example.broadcastreceiverdemo.BC1" > <intent-filter > <action android:name="BC_One" /> </intent-filter> </receiver>
普通广播特点:
同级别接收先后是随机的(无序)
级别低的后收到广播(intent-filter中android:priority="")
接收器不能截断广播的继续传播也不能处理广播(abortBroadcast())
同级别动态注册高于静态注册
有序广播特点:
同级别的接收顺序是随机的
能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否截断该广播
接收器能截断广播的继续传播,也能处理广播
同级别动态注册高于静态注册
Bundle传递数据:
Bundle bundle = new Bundle();
bundle.putString("test", "data");
setResultExtras(bundle);
Bundle bundle = getResultExtras(true);
String s2 = bundle.getString("test");
动态注册要记得销毁
在onDestroy方法中
unregisterReceiver()
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
public void doClick(View v) { switch (v.getId()) { case R.id.send1: // 发送一条普通广播 Intent intent = new Intent(); intent.putExtra("msg", "common broadcast"); intent.setAction("BC_One"); sendBroadcast(intent); break; case R.id.send2: // ordered broadcast Intent intent2 = new Intent(); intent2.putExtra("msg", "ordered broadcast"); intent2.setAction("BC_One"); sendOrderedBroadcast(intent2, null); // 先发送后注册 异步广播 滞留性 case R.id.send3: // asyn Intent intent3 = new Intent(); intent3.putExtra("msg", "this is"); intent3.setAction("BC_Three"); sendStickyBroadcast(intent3); IntentFilter intentFilter = new IntentFilter("BC_Three"); BC3 bc3 = new BC3(); registerReceiver(bc3, intentFilter); default: break; } } @Override protected void onDestroy() { super.onDestroy(); // unregisterReceiver(receiver); }
相关文章推荐
- TCP数据传输(六):上传图片并给出反馈
- HDU 4496 D-City (并查集)
- 20145227 《Java程序设计》实验五实验报告
- Apache kafka 工作原理介绍(作者原创文章已发表在IBM开发者论坛)
- Android 高效加载图片
- zookeeper安装
- solr配置中文分词遇到的问题
- 霍夫曼树及霍夫曼编码的C语言实现
- Android WebView的缓存方式分析
- 如何配置tomcat虚拟路径
- 机器人的运动范围
- 重识JSP
- 可视化篇:R可视化--map图
- TCP数据传输(五):上传文本文件并给出反馈
- 26.最小的K个数
- android打开相册选取图片或打开相机拍照并进行裁剪
- C++中的const,static const和static类成员的初始化问题
- 2016年“计蒜客”杯华中师范大学第十四届程序设计竞赛题解
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了(结构体排序,背包????)
- c++作业5