信心比金钱更重要!

目标明确==>>>计划跟踪==>>>行动执行!
posts - 41, comments - 3, trackbacks - 0, articles - 2
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

BroadcastReceiver

Posted on 2012-05-07 11:01 luofeng 阅读(266) 评论(0)  编辑 收藏 引用 所属分类: Android基础
http://blog.csdn.net/liuhe688/article/details/6955668


BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。



 

静态注册

静态注册是在AndroidManifest.xml文件中配置的,注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。

动态注册

动态注册需要在代码中动态的指定广播地址并注册,通常我们是在Activity或Service注册一个广播》
注意,registerReceiver是android.content.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,所以可以直接调用。在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作:


普通广播(Normal Broadcast)
 Context.sendBroadcast()发送

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。


有序广播(Ordered Broadcast)

 Context.sendOrderedBroadcast()发送有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播。
运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。



Permission权限

  要接收某些action,需要在AndroidManifest.xml里面添加相应的permission。例如接收SMS:

===============

小结:
  • . 推荐使用显式指明receiver,在配置文件AndroidManifest.xml指明; 
    . 每次接收广播都会重新生成一个接收广播的对象,再次调用onReceive;
  • . 在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理。



========================
利用Application动态注册 和 androidMenifeist.xml静态注册区别
退出程序,利用Application动态注册收不到广播。




只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理