四大组件_BroadcastReceiver

3. BroadcastReceiver

1. 注册方式

静态注册
直接写在AndroidManifest.xml中

  
              
                  
                  // 可选
              
  

配置了以上信息之后,只要是android.intent.action.MY_BROADCAST这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。

动态注册

MyReceiver receiver = new MyReceiver();  
          
IntentFilter filter = new IntentFilter();  
filter.addAction("android.intent.action.MY_BROADCAST");  
          
registerReceiver(receiver, filter);

在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,记得在特定的地方执行解除注册操作. 这种方式不是常驻型的,也就是说广播会跟随程序的生命周期

2. 广播类型

** 普通广播**
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
abortBroadcast() 对其他接收者无效
** 有序广播**
有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播
abortBroadcast() 调用后, 低优先级的接受者就接受不到了

AndroidManifest.xml 文件需要这样设置
  
      
          
          
      
  
  
      
          
          
      
  

// 发送广播的业务逻辑
public void send(View view) {  
    Intent intent = new Intent("android.intent.action.MY_BROADCAST");  
    intent.putExtra("msg", "hello receiver.");  
    sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");  
}  

为何使用权限, 请参考 Android权限相关文档

** 粘滞广播**
广播也是系统资源, 存在生命周期, 由系统进行管理
粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,10秒限制是指普通的广播如果onReceive方法执行时间太长,超过10秒的时候系统会将这个广播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行

使用广播经常涉及监听系统事件, 例如 开机完成, 网络状态变化, 短信, 等等, 均需相关权限.

详细使用介绍请另寻他文, 另外, 请关注一下 EventBus的使用

你可能感兴趣的:(四大组件_BroadcastReceiver)