Android开发-java版学习笔记第四天
一、BroadcastReceiver动态广播
1.优缺点:
优点
灵活性高:可以在运行时根据条件动态注册和注销
生命周期可控:与注册的 Context 生命周期绑定,避免内存泄漏
精确控制接收范围:可以根据应用状态决定何时接收广播
安全性较好:只在应用运行时接收广播
缺点
应用停止后无法接收:当应用进程被杀死时,无法接收广播
需要代码管理:需要手动注册和注销,增加代码复杂度
仅限于应用内:通常用于应用内部的通信
2.实现方式:
创建intentFilter的实例,并且给它添加一个值为
android.net.conn.CONNECTIVITY_CHANGE的action,这个值正是系统在网络状态发生变化的时候发出的值,我们所做的工作正是接受这个值并执行对应的操作。
动态注册的接收器一定要取消注册:onDestroy()方法
定义了一个NetWorkChangeReceiver的内部类继承BroadcastReceiver并重写了onReceive方法
给registerReceiver传入netWorkChangeReceiver和intentFilter实例进行注册接收器

然后在AndroidManifest.xml文件中声明权限

运行后可以开关网络状态,同时会弹出提示
二、BroadcastReceiver静态广播
1.优缺点:
优点
持久性监听:应用未运行时也能接收广播(系统广播)
自动唤醒:收到广播时可以启动应用进程
声明简单:在 AndroidManifest.xml 中声明即可
系统事件监听:适合监听系统级事件(如开机完成、网络变化)
缺点
资源消耗:即使应用不需要,系统也要维护接收器
安全性风险:可能被恶意应用发送广播攻击
灵活性差:无法根据运行时条件动态控制
Android 8.0+ 限制:对隐式广播有很多限制
2.实现方法:

Exported属性代码是否允许这个广播接收器接收除本程序之外的广播
Enabled属性表示是否启动这个广播接收器

在文件中写入接收到对应的信息后要执行的代码
同时由于我们使用的Android Studio快捷方式创建的广播接收器,所以可以在AndroidManifest.xml文件中找到自动注册的代码

将其改为如下代码,安卓系统在启动完成后会发出一条值为android.intent.action.BOOT_COMPLETED的广播

同时要启动这个接收器也要声明权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
但是按照这个做,我没有收到开机广播,各位大佬能否给以指正,万分感谢!!
