[toc]
我们先来一个生活化的例子。介绍一下什么是广播,不知道有多少读者,知道电话普及以前中国的农村是一个什么样的生活,那个时候每个村里面都有一个大喇叭,用来通知重要的事情,比方说,某一家发生了火灾,需要其他家去帮忙救火,比方说定时播放的天气预报,还有,外出务工的人给家里的人打电话,那个时候不像现在,人手一个电话,那个时候一个村才有一个电话,在外打工的人,不能直接打电话到家里面,而是,打电话到村里面,村里面通知,其家人,家里面的人,跑步到村委会,再打电话回去,完成跨省的通信,还有的人家,距离村里面的大喇叭,比较远,会在自己家里面,安装一个自己的小喇叭。我们将围绕这个生活化的例子,理解,广播接收器当中的,注册广播【动态注册,静态注册】,发送广播,显式广播,隐式广播,有序广播,系统广播,自定义广播。
系统的广播:就是村里面的火灾广播通知,他没有针对性,由一个系统对所有的人发出通知,那么至于你不要接受,要不要做出反应,那就是你自己的事情,每一天,这样的广播会发出很多次这样的广播,比方说,你开机了,会有一个开机广播【android.intent.action.BOOT_COMPLETED】,你充电了,会有一个充电广播【ACTION_POWER_CONNECTED】,当然有的系统广播,并不是所有的应用都能够收得到的,有些系统广播是需要设置权限才能够接受得到,有些系统广播只能够系统级别的应用才能够接受得到信息。
自定义的广播:这个就是针对某一个广播接收器发送的广播,只有这一个广播接收器能够接受得到,就好像,你在外面务工,给家里面的人打电话,以前的乡下并不是每一家都有电话,一般来说都是一个村一个电话,你打电话到村里面,然后村里面,通过广播的方式,“李明华,你的家人给你打电话,请快速到村宣传办公室接听电话”
广播接收器(BroadcastReceiver)是 Android 系统中一种用于在应用程序之间发送和接收全局消息的组件。它允许你响应系统级事件,例如设备启动、网络状态变化、电池电量变化等。广播接收器还可以用于在应用程序内部发送和接收消息,以实现不同组件之间的通信
播接收器(BroadcastReceiver)没有像 Activity、Service 或 Fragment 那样的典型生命周期。广播接收器的生命周期非常简短,因为它们的主要目的是接收应用程序之间或系统组件之间发送的广播消息,并对其进行响应。
当广播接收器接收到匹配的 Intent 时,系统会调用其 onReceive()
方法。在 onReceive()
方法内,可以处理接收到的 Intent,例如,检查 Intent 的操作、读取携带的数据等。在处理完广播后,广播接收器的实例会被销毁。
广播接收器的生命周期可以总结为以下步骤:
- 注册:通过在 AndroidManifest.xml 中静态注册或在代码中动态注册,订阅特定的广播事件。
- 接收:当广播事件发生时,系统会创建广播接收器的实例,并调用其
onReceive()
方法。 - 处理:在
onReceive()
方法内处理接收到的 Intent。 - 销毁:处理完广播后,广播接收器实例会被销毁。
需要注意的是,广播接收器不应执行耗时操作,因为在 onReceive()
方法中,有一个很短的执行时间限制(约 10 秒)。如果需要执行耗时操作,可以考虑在广播接收器内启动一个 Service 来处理。
在写广播接收器之前,我们要知道,在 android 当中有哪些类型
- 首先是按照注册的方式来说,分为,静态注册和动态注册,
- 所谓的,静态注册,就是将我们的广播的注册写在 androidmanifest.xml 当中,写在 androidmanifest.xml 当中,我们就应该知道,这样的广播的注册,在 app 一开始运行的时候,就已经注册成功,并且一只持续到,app 的结束。
- 所谓的,动态注册,就是我们的注册的广播,在 Java 层或者说在 kotlin 层,那么只有当,当我们的相应的 Java 代码执行了之后,才会注册这个广播,并且当所附属的 activity ,或者 service 生命周期结束了,这个广播就应该
unregisterReceiver(receiver);
来注销这个广播,如果不注销,就会造成内存的泄漏
- 按照是否指定接受者,分为显式广播,和隐式广播
- 2323
- 全额大青蛙恶气
- 按照广播的发出的主角,我们可以将广播分为系统广播,和自定义的广播
- 气温
- 前期娥
- 其余的特殊广播
- 有序广播,阻断有序广播,篡改有序广播,最终接受者,结果码
- 带权限的广播
- 设置接收到之后的操作
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 在这里处理接收到的广播
}
}
- 注册广播
<application ...>
...
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.MY_BROADCAST" />
</intent-filter>
</receiver>
...
</application>
- 发送广播
Intent intent = new Intent("com.example.MY_BROADCAST");
sendBroadcast(intent);