广播作为 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 标签中过滤自己想要监听的广播,需要注意的是,有的广播需要开启权限。
那么两种注册方式有什么区别呢?
- 动态注册需要自己注册和取消注册,而且只有当注册代码运行后才会监听广播,程序开启前和程序关闭后不会监听广播。
- 静态注册不管应用或者程序处于什么阶段,只要安装在手机上都会去监听广播,但是相对来说更加消耗收集资源。