Android之广播(Broadcast)

目录

广播(Broadcast)是Android四大组件之一,是Android中用于消息传递的重要机制,通过广播,应用程序可以在不同组件之间或不同应用之间传递消息。广播机制允许应用程序发送和接收系统范围或应用范围的消息。广播的主要用途包括通知应用程序特定事件的发生,例如设备启动、电池电量低、网络状态变化等。

广播的类型

普通广播(Normal Broadcasts)

  • 普通广播是完全异步的,所有接收者几乎同时接收广播消息。
  • 普通广播的性能较高,因为它们不需要等待其他接收者处理完消息。
  • 适用于不需要顺序处理的广播消息。

有序广播(Ordered Broadcasts)

  • 有序广播是同步的,接收者按优先级顺序依次接收和处理广播消息。
  • 每个接收者可以在处理完消息后修改广播数据或中止广播的继续传播。
  • 适用于需要按顺序处理的广播消息。

粘性广播(Sticky Broadcasts)

  • 粘性广播在发送后会一直存在,直到被新的相同类型的广播替代。
  • 接收者在注册时可以立即接收到最近的粘性广播消息。
  • 适用于需要保存广播状态的场景。
  • 注意:从Android 5.0开始,粘性广播已被弃用,不推荐使用。

广播的发送

广播可以通过sendBroadcast()、sendOrderedBroadcast()等方法发送。

cpp 复制代码
// 发送普通广播
Intent intent = new Intent("com.example.MY_ACTION");
sendBroadcast(intent);

// 发送有序广播
sendOrderedBroadcast(intent, null);

广播的接收

广播接收者(BroadcastReceiver)是一个用于接收广播消息的组件。广播接收者可以静态注册(在AndroidManifest.xml中声明)或动态注册(在代码中使用registerReceiver()方法)。

静态注册

在AndroidManifest.xml中声明广播接收者:

cpp 复制代码
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.example.MY_ACTION" />
    </intent-filter>
</receiver>

广播接收者类:

cpp 复制代码
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理接收到的广播消息
        String action = intent.getAction();
        if ("com.example.MY_ACTION".equals(action)) {
            // 执行相应操作
        }
    }
}

动态注册

在代码中使用registerReceiver()方法注册广播接收者:

cpp 复制代码
public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 动态注册广播接收者
        receiver = new MyBroadcastReceiver();
        IntentFilter filter = new IntentFilter("com.example.MY_ACTION");
        registerReceiver(receiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消注册广播接收者
        unregisterReceiver(receiver);
    }
}

广播的应用场景

  1. 系统广播:接收系统级别的事件,例如设备启动、电池电量低、网络状态变化等。
  2. 应用内部广播:在应用内部不同组件之间传递消息,例如通知Activity数据更新、服务状态变化等。
  3. 跨应用广播:不同应用之间传递消息,例如社交应用之间共享信息。

注意事项

  • 安全性:广播机制可能会带来安全隐患,恶意应用可能会接收或发送广播消息。使用权限和签名广播可以提高安全性。
  • 性能:频繁发送广播可能会影响性能,特别是在有大量接收者的情况下。使用LocalBroadcastManager可以限制广播范围,提高性能。
  • 生命周期:动态注册的广播接收者需要在适当的生命周期方法中注册和取消注册,以避免内存泄漏。

Activity之Intent、生命周期、启动模式
Android之service两种启动方式的异同
Android之Service与IntentService区别
Android之内容提供者(ContentProvider)
Android之广播(Broadcast)
ANR 超时的定义

相关推荐
2501_9160088944 分钟前
iOS 抓包工具有哪些?全面盘点主流工具与功能对比分析
android·ios·小程序·https·uni-app·iphone·webview
2501_915921431 小时前
iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护
android·ios·小程序·https·uni-app·iphone·webview
CYRUS_STUDIO1 小时前
LLVM 全面解析:NDK 为什么离不开它?如何亲手编译调试 clang
android·编译器·llvm
CYRUS_STUDIO1 小时前
静态分析神器 + 动态调试利器:IDA Pro × Frida 混合调试实战
android·逆向
g_i_a_o_giao4 小时前
Android8 binder源码学习分析笔记(一)
android·java·笔记·学习·binder·安卓源码分析
翻滚丷大头鱼4 小时前
android 四大组件—BroadcastReceiver
android
人生游戏牛马NPC1号4 小时前
学习 Android (二十) 学习 OpenCV (五)
android·opencv·学习
2501_916008895 小时前
uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
android·ios·小程序·https·uni-app·iphone·webview
文 丰5 小时前
【AndroidStudio】官网下载免安装版,AndroidStudio压缩版的配置和使用
android
WillWolf_Wang5 小时前
Linux 编译 Android 版 QGroundControl 软件并运行到手机上
android·linux·智能手机