Broadcast 学习

广播类别:标准广播,有序广播,本地广播

  • 标准广播异步发送,所有人能够接收只要注册接收器就能监听
  • 有序广播顺序发送,根据在便签intent-filter属性中设置优先级属性 priority = n,说明接收广播的顺序
  • 本地广播,应用程序内部发送接收,外界不能接收,提供一定的安全性,通过动态注册方式,能接收到的必定是程序自身,那就必须已启动程序

注册方式:静态注册,动态注册

  • 静态:manifest.xml中添加组件,需要包括,假如action是系统级别,还要声明相关使用权限.同时在java代码中继承Broadcast类并重写onReceive 函数操作,该函数内部操作不能耗时不能开线程去执行,一般是提供通知或者启动一个服务.
  • 动态:一般在需要监听广播的位置,新建一个内部类Inner,该类Inner继承Broadcast并重写onReceive方法.在java代码中完成intentfilter与内部类对象的绑定.基本步骤是
  • 新建 IntentFilter 实例并将特定的action使用addAction添加到Filter中
  • 新建内部类Inner的对象inner,并使用Activity中的registerReceiver将inner与intentfilter完成绑定->
    registerReceiver(inner,intentFilter)
  • 必须保证Activity被onDestory时,解除receiver的绑定
  void onDestroy() {    
             super.onDestroy();
             unregisterReceiver(inner);
}

拦截有序广播

  • 有序广播的发出,调用的是sendOrderBroadcast(intent,null).设置不同的receiver优先级,同时在onReceive函数中调用abortBroadcast函数完成拦截功能.

本地广播

  • 类似动态注册过程,不再是使用Activity的registerReceive完成,在Acitivity中添加一个LocalBroadcastManager实例完成广播注册,intentFilter绑定,发送本地广播的工作.(步骤2一般在一个用户事件触发的函数中定义,3则是onCreate中必备实现)
  1. 最先实例化LocalBroadcastManager
    LocalBroadcastManager manager = new LocalBroadcastManager.getInstance(this);
  2. 发送本地广播
    manager.sendBroadcast(intent) //intent已包含特定action
  3. 注册receiver并绑定filter,新建fitler与内部类receiver与动态注册一致,只是绑定需要用manager实例完成
    manager.registerReceiver(localReceiver,intentfilter);

你可能感兴趣的:(Broadcast 学习)