安卓广播接收器(Broadcast Receiver)的介绍与使用

在 Android 开发中,广播接收器(Broadcast Receiver)是一种能够监听系统全局广播消息的组件。这些广播消息可以来自系统(如电池电量变化、网络连接变化等),也可以来自应用程序本身。广播接收器的主要作用和使用方法如下:

作用

  1. 系统事件监听:可以监听系统层面的各种事件,例如设备启动完成、电池电量变化、网络连接状态改变等。这使得应用能够对系统状态的变化做出相应的响应。
  2. 应用间通信:不同的应用可以通过发送和接收广播来进行有限的通信。例如,一个应用可以发送自定义广播,其他应用注册了相应广播接收器的组件就能接收到该广播并进行处理。
  3. 解耦组件间通信:通过广播机制,组件之间不需要直接引用对方,降低了组件之间的耦合度,提高了代码的可维护性和可扩展性。

使用方法

  1. 创建广播接收器类 :继承 BroadcastReceiver 类并重写 onReceive(Context context, Intent intent) 方法。在这个方法中处理接收到的广播消息。

    java

    scala 复制代码
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 处理接收到的广播
            if (intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
                Toast.makeText(context, "电量低", Toast.LENGTH_SHORT).show();
            }
        }
    }
  2. 注册广播接收器:有两种注册方式,静态注册和动态注册。

    • 静态注册 :在 AndroidManifest.xml 文件中注册广播接收器。这种方式即使应用没有运行,也能接收广播。

      xml

      xml 复制代码
      <receiver android:name=".MyBroadcastReceiver">
          <intent-filter>
              <action android:name="android.intent.action.BATTERY_LOW" />
          </intent-filter>
      </receiver>
    • 动态注册 :在代码中通过 registerReceiver() 方法注册广播接收器。这种方式需要在应用运行时才能接收广播,并且在不需要时要通过 unregisterReceiver() 方法取消注册,以避免内存泄漏。

      java

      scss 复制代码
      MyBroadcastReceiver receiver = new MyBroadcastReceiver();
      IntentFilter filter = new IntentFilter();
      filter.addAction(Intent.ACTION_BATTERY_LOW);
      registerReceiver(receiver, filter);
      // 在适当的地方取消注册,例如在Activity的onDestroy()方法中
      @Override
      protected void onDestroy() {
          super.onDestroy();
          unregisterReceiver(receiver);
      }
  3. 发送广播 :使用 sendBroadcast() 方法发送普通广播,使用 sendOrderedBroadcast() 方法发送有序广播。

    • 发送普通广播:

      java

      ini 复制代码
      Intent intent = new Intent("com.example.MY_CUSTOM_ACTION");
      sendBroadcast(intent);
    • 发送有序广播:

      java

      ini 复制代码
      Intent intent = new Intent("com.example.MY_CUSTOM_ACTION");
      sendOrderedBroadcast(intent, null);

      有序广播会按照注册的优先级依次发送给各个广播接收器,每个接收器可以选择是否继续传递广播给下一个接收器,也可以修改广播内容。

广播接收器在 Android 开发中是一个非常强大的机制,能够实现应用与系统以及应用之间的高效通信和事件监听。但在使用时需要注意合理使用静态和动态注册方式,避免资源浪费和内存泄漏。

相关推荐
星恒随风9 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
传奇开心果编程10 小时前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
2603_9696948512 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea12 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
慕容雪_14 小时前
Capacitor8-Android打包完整手册
android·打包·capacitor
Go Work16 小时前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记
Oll Correct16 小时前
Adobe illustrator 案例十四:花元素标志草图绘制
笔记·ui·adobe·illustrator
阿杰m17 小时前
Android源码第十三章:Bluetooth——沿一次发现走到控制器
android
booboosui17 小时前
派活给另一个 AI:前后两次文件夹快照,就是交付清单
android
每月一号准时摆烂20 小时前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记