BoradCast Receiver
来源:互联网 发布:螃蟹淘宝网店源码下载 编辑:程序博客网 时间:2024/06/05 03:01
描述一下 BroadcastReceiver
四大组件之一,接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。
广播分两种:有序广播和无序广播。
内部通信实现机制:通过 Android 系统的 Binder 机制实现通信。
无序广播:完全异步,逻辑上可以被任何广播接收者接收到。优点是效率较高。缺点是一个接收者不能将处理结果传递给下一个接收者,并无法终止广播 intent 的传播。
有序广播:按照被接收者的优先级顺序,在被接收者中依次传播。比如有三个广播接收者 A,B,C,优先级是 A > B > C。那这个消息先传给 A,再传给 B,最后传给 C。每个接收者有权终止广播,比如 B 终止广播,C 就无法接收到。此外 A 接收到广播后可以对结果对象进行操作,当广播传给 B 时,B 可以从结果对象中取得 A 存入的数据。在通过 Context.sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,initialCode, initialData, initialExtras)时我们可以指定 resultReceiver 广播接收者, 这个接收者我们可以认为是最终接收者,通常情况下如果比他优先级更高的接收者如果没有终止广播,那么他的
onReceive 会被执行两次,第一次是正常的按照优先级顺序执行,第二次是作为最终接收者接收。如果比他优先级高的接收者终止了广播,那么他依然能接收到广播。在我们的项目中经常使用广播接收者接收系统通知,比如开机启动、sd 挂载、低电量、外播电话、锁屏等。
如果我们做的是播放器,那么监听到用户锁屏后我们应该将我们的播放之暂停等。
注册广播有几种方式,这些方式有何优缺点?
第一种使用代码进行注册如:
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); IncomingSMSReceiver receiver = new IncomgSMSReceiver(); registerReceiver(receiver.filter);
第二种:在清单文件中声明,添加
<receive android:name=".IncomingSMSReceiver " > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED") <intent-filter><receiver>
两种注册类型的区别是:
1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
BroadCastReceiver 的生命周期
1、 广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁;
2、 广播接收者中不要做一些耗时的工作,否则会弹出Application No Response 错误对话框;
3、 最好也不要在广播接收者中创建子线程做耗时的工作, 因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉;
4、耗时的较长的工作最好放在服务中完成;
Android 引入广播机制的用意
1、从 MVC 的角度考虑(应用程序内) ,android 的四大组件本质上就是为了实现移动或者说嵌入式设备上的 MVC 架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。
2、程序间互通消息(例如在自己的应用程序内监听系统来电)
3、效率上(参考 UDP 的广播协议在局域网的方便性)
4、 设计模式上(反转控制的一种应用,类似监听者模式)
- BoradCast Receiver
- <receiver>
- Receiver
- Spark Boradcast原理
- Android 不归路之广播BoradCast篇
- angular的$on $emit $boradcast的理解
- Android中的四大组件之-Boradcast
- lumaqq receiver
- Trap receiver
- Receiver 实例
- broadcast receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Message Receiver
- Boardcast receiver
- Broadcast Receiver
- Broadcast Receiver
- uc/os-II 分析(8)---互斥型信号量
- 网页中添加多媒体元素
- 数据结构(三)——单链表的插入与删除
- 常见语言的注释总结
- 字符函数
- BoradCast Receiver
- 编译器的三级优化
- 机器学习常见的算法面试题总结
- Installation notes for MCScanX version
- 顺序栈共享
- ContentProvider
- 9BASC代码排序
- Eclipse上Eclipse Javascript Neon缺少动态web项目的解决方法
- php 将网络图片保存到本地的方法