广播作为 Android 四大组件之一,其重要性不言而喻,使用广播的时候一般有两种注册方式:
- 动态注册(通过 Java 代码实现广播注册)
新建一个类,继承自 BroadcastReceiver,重写 onReceive() 方法
public class ChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接受到广播",Toast.LENGTH_SHORT).show(); } }
然后在你需要的地方使用 registerReceiver() 方法注册广播,动态注册广播要记得取消注册
public class MainActivity extends AppCompatActivity { //创建广播对象 private ChangeReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //为广播添加过滤,本处是监听网络变化 IntentFilter filter = new IntentFilter(); filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); receiver = new ChangeReceiver(); //注册广播 registerReceiver(receiver,filter); } @Override protected void onDestroy() { super.onDestroy(); //取消注册 unregisterReceiver(receiver); } }
- 静态注册
新建一个类,继承自 BroadcastReceiver,重写 onReceive() 方法
public class ChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接受到广播",Toast.LENGTH_SHORT).show(); } }
在 ManiFest 文件中的 application 标签内注册该广播
<receiver android:name=".ChangeReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name=""/> </intent-filter> </receiver>
注册该标签时,可以在 intent-filter 标签中过滤自己想要监听的广播,需要注意的是,有的广播需要开启权限。
那么两种注册方式有什么区别呢?
- 动态注册需要自己注册和取消注册,而且只有当注册代码运行后才会监听广播,程序开启前和程序关闭后不会监听广播。
- 静态注册不管应用或者程序处于什么阶段,只要安装在手机上都会去监听广播,但是相对来说更加消耗收集资源。