BroadcastReceiver注册方式与区别

广播作为Android四大组件的一员,在整个系统中扮演者很重要的角色。

广播注册的方式分为两种,静态注册和动态注册。

1、静态注册

直接在AndroidManifest.xml里通过标签声明。

使用示例


         
             
             
             
             
             
             
             
        

当应用启动时,系统会自动实例化JPushReceiver类,并注册到广播系统中,这个步骤由系统自动完成。
静态注册广播的特点是:广播常驻后台,不会随着其他组件的消亡而变化。这样的话不仅占用内存,而且会增加应用的耗电量。

2、动态注册

在代码中调用Context.registerReceiver()方法完成注册。为了避免内存泄漏,当广播不再使用时,开发者需要手动注销广播。

使用示例

/*****注册广播*****/
// 1. 实例化BroadcastReceiver子类 &  IntentFilter
JPushReceiver mBroadcastReceiver = new JPushReceiver();
IntentFilter intentFilter = new IntentFilter();
// 2. 设置接收广播的类型
intentFilter.addAction("XXX");
// 3. 动态注册:调用Context的registerReceiver()方法
registerReceiver(mBroadcastReceiver, intentFilter);
/*****注销广播*****/
if(mBroadcastReceiver!=null) {
   unregisterReceiver(mBroadcastReceiver);
}

动态注册广播的特点是:注册和注销的过程需要开发者自己手动完成,生命周期灵活可控。

作为开发者必须要知道的是,随着Android系统的不断更新迭代,广播的发布规则也发生了一些变化。

  • 在Android 7.0(API 24)及以上的版本,将不再使用系统广播中的 ACTION_NEW_PICTURE和ACTION_NEW_VIDEO
  • 在Android 7.0(API 24)及以上的版本,监听CONNECTIVITY_ACTION广播时,需要使用registerReceiver(BroadcastReceiver, IntentFilter)方法,只在manifest文件中声明receiver将失效
  • 从Android 8.0(API 26)开始,对于大部分隐式广播(广播的对象不是针对你开发的APP),不能在menifest中声明receiver,如果需要使用隐式广播,需要使用context-registered reciever 的方法。

你可能感兴趣的:(BroadcastReceiver注册方式与区别)