Android:BroadcastReceiver广播注册方式汇总

前言

  • BroadcastReceiver(广播接收器),属于 Android 四大组件之一
  • Android 开发中,BroadcastReceiver 的应用场景非常多
  • 今天,我将详细讲解关于BroadcastReceiver的注册方式:静态注册 & 动态注册

1. 静态注册

  • 在AndroidManifest.xml里通过****标签声明
  • 属性说明:


//用于指定此广播接收器将接收的广播类型
//本示例中给出的是用于接收网络状态改变时发出的广播
 

    

  • 注册示例

    //用于接收网络状态改变时发出的广播
    
        
    

当此App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。


2. 动态注册

在代码中通过调用Context的registerReceiver()方法进行动态注册BroadcastReceiver,具体代码如下:

@Override
  protected void onResume(){
      super.onResume();
      
    //实例化BroadcastReceiver子类 &  IntentFilter
     mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();
     IntentFilter intentFilter = new IntentFilter();

    //设置接收广播的类型
     intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);

    //调用Context的registerReceiver()方法进行动态注册
     registerReceiver(mBroadcastReceiver, intentFilter);
 }


//注册广播后,要在相应位置记得销毁广播
//即在onPause() 中unregisterReceiver(mBroadcastReceiver)
//当此Activity实例化时,会动态将MyBroadcastReceiver注册到系统中
//当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。
 @Override
 protected void onPause() {
     super.onPause();
      //销毁在onResume()方法中的广播
     unregisterReceiver(mBroadcastReceiver);
     }
}

3. 两种注册方式的区别

Android:BroadcastReceiver广播注册方式汇总_第1张图片


4. 特别注意

  • 动态广播最好在Activity的onResume()注册、onPause()注销。
  • 原因:
    1. 对于动态广播,有注册就必然得有注销,否则会导致内存泄露

重复注册、重复注销也不允许

  1. Activity生命周期如下:

Android:BroadcastReceiver广播注册方式汇总_第2张图片

Activity生命周期的方法是成对出现的:

  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

在onResume()注册、onPause()注销是因为onPause()在App死亡前一定会被执行,从而保证广播在App死亡前一定会被注销,从而防止内存泄露。

  1. 不在onCreate() & onDestory() 或 onStart() & onStop()注册、注销是因为:
    当系统因为内存不足(优先级更高的应用需要内存,请看上图红框)要回收Activity占用的资源时,Activity在执行完onPause()方法后就会被销毁,有些生命周期方法onStop(),onDestory()就不会执行。当再回到此Activity时,是从onCreate方法开始执行。
  2. 假设我们将广播的注销放在onStop(),onDestory()方法里的话,有可能在Activity被销毁后还未执行onStop(),onDestory()方法,即广播仍还未注销,从而导致内存泄露。
  3. 但是,onPause()一定会被执行,从而保证了广播在App死亡前一定会被注销,从而防止内存泄露。

5. 总结

  • 本文全面讲解了BroadcastReceiver的注册方式:静态注册 & 动态注册
  • 接下来,我会继续讲解Android的其他知识,感兴趣的同学可以继续关注carson_ho的微信公众号
    Android:BroadcastReceiver广播注册方式汇总_第3张图片
    Android:BroadcastReceiver广播注册方式汇总_第4张图片

请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

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