Android 广播(Broadcast Receiver)两种注册方式

广播作为 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 标签中过滤自己想要监听的广播,需要注意的是,有的广播需要开启权限。

那么两种注册方式有什么区别呢?

  1. 动态注册需要自己注册和取消注册,而且只有当注册代码运行后才会监听广播,程序开启前和程序关闭后不会监听广播。
  2. 静态注册不管应用或者程序处于什么阶段,只要安装在手机上都会去监听广播,但是相对来说更加消耗收集资源。
所以两种注册方式要按照需求进行选择。


猜你喜欢

转载自blog.csdn.net/young_time/article/details/80256342