Broadcast Receiver

    Broadcast receiver和activity、service组件一样都是接收intent的组件。一收到匹配的broadcast intent,broadcast receiver的onReceive(Context,Intent)方法立即运行,然后broadcast receiver就会被销毁;onReceive方法同样运行在主线程上,所以不能在此方法中进行耗时的重度任务,如网络连接或者数据的永久存储等。

    作为Android四大组件之一,Broadcast receiver同样需要在系统中登记才能使用。登记有两种方式:在manifest配置文件中登记  使用registerReceiverunregisterReceiver方法。


一、在manifest配置文件中登记

    假如你的应用需要开机自启动,那么你就需要一个能监听BOOT_COMPLETED操作的broadcast intent的broadcast receiver。首先创建一个StartupReceiver新类:

public class StartupReceiver extends BroadcastReceiver {private static final String TAG = "StartupReceiver";@Overridepublic void onReceive(Context context, Intent intent) {// 对intent消息进行处理}}


然后再往manifest配置文件中加入登记代码并包含相应的intent-filter:

                                                                 
然后再添上可以接收BOOT_COMPLETED广播的权限就大功告成了:

 


二、动态Broadcast receiver

      通过Context.registerReceiver和Context.unregisterReceiver,动态的将触发器组件与所需要监听的事件进行绑定。通常会在Activity.onResume中进行触发器组件的注册,而在Activity.onPause中注销对应的触发组件。


广播事件的发送


一、无序广播

     通过Context.sendBroadcast方法进行发送。所有注册了该广播事件的触发器组件都会获得事件通知,并不会按一定的顺序运行。


二、有序广播

     通过Context.sendOrderedBroadcast方法进行发送。明显所有监听该事件的触发器组件,都会按照相应的优先级排序,从高到低依次处理该事件,下面是一个优先级最低的触发器组件的注册代码:

                                                
      同时,优先级高的broadcast receiver可以通过BroadcastReceiver.setResultCode(Activity.RESULT_CANCELED)来终止这个广播事件的传播,这样优先级低的broadcast receiver就不会在有机会处理该事件了。





更多相关文章

  1. Android架构组件WorkManager详解
  2. Android 之 事件
  3. Android四大组件之~~Service
  4. Android实现TextView部分文本监听单击事件
  5. Android重写OnTouchListener实现双击事件的监听
  6. android 开发常用框架、组件 -UI篇

随机推荐

  1. SSM框架疫情下的青岛滨海学院中央图书馆
  2. SSM框架校园闲置商品交易平台的设计与实
  3. 分布式事务,原理简单,写起来全是坑!
  4. android 嵌套ViewPager + Fragment实现仿
  5. Android(安卓)热修复(腾讯bugly)
  6. Java/Android倒计时(开始,暂停,恢复,停止)
  7. android的socket程序中conn.getResponseC
  8. Android4.0 input touch解析
  9. Android手机拍照
  10. Android周学习Step By Step(7)--Activity简