自定义Android广播Broadcast实战

2 下载量 176 浏览量 更新于2024-08-29 1 收藏 450KB PDF 举报
"Android系统中的广播Broadcast机制详解" 在Android系统中,广播Broadcast是一种全局的通知机制,允许应用程序在不直接交互的情况下传递消息。广播分为两种主要类型:静态注册和动态注册。 **一、自定义广播** 在`activity_main.xml`文件中,通常不会涉及广播接收者的代码,它主要用于布局设计。不过,我们关注的是`MyBroadcastReceiver1.java`,这是一个自定义的广播接收者类。这个类继承自`BroadcastReceiver`,当接收到特定的广播事件时,`onReceive()`方法会被调用。在这个例子中,`onReceive()`方法记录了接收到的广播事件,并打印出广播的动作(`intent.getAction()`)。 **二、静态注册广播** 1. **静态注册**是在`AndroidManifest.xml`文件中进行的,这种方式的广播在应用程序启动时就会被创建,即使对应的Activity没有运行也能接收到广播。在`MainActivity.java`中,我们创建一个`Intent`并设置其动作为"Help_Stitch",这个动作必须与`AndroidManifest.xml`中广播接收器注册的动作相匹配,否则接收器将无法接收到广播。然后通过`sendBroadcast()`方法发送广播。 ```xml <receiver android:name=".MyBroadcastReceiver1"> <intent-filter> <action android:name="Help_Stitch" /> </intent-filter> </receiver> ``` **三、动态注册广播** 2. **动态注册**则是在代码运行时进行的,这种方式的广播只有在注册后才能接收到广播,当应用程序关闭后,广播接收器也会随之销毁。如果注释掉`AndroidManifest.xml`中的静态广播注册,就需要在`MainActivity`的某个地方(例如`onCreate()`或者用户触发的按钮点击事件)动态注册`MyBroadcastReceiver1`。动态注册的广播接收器需要实现`BroadcastReceiver`的实例化,设置`IntentFilter`,然后使用`Context.registerReceiver()`方法进行注册。发送广播的方式与静态注册相同,都是通过`sendBroadcast(Intent)`。 ```java BroadcastReceiver myReceiver = new MyBroadcastReceiver1(); IntentFilter filter = new IntentFilter(); filter.addAction("Help_Stitch"); registerReceiver(myReceiver, filter); ``` **对比分析** 静态注册的优点在于广播接收器始终活跃,无论应用是否在后台,都能接收到广播。缺点是即使应用不使用,也会占用系统资源。动态注册的优点是可以节省系统资源,只有在需要时才注册广播接收器,缺点是当应用被系统杀死或者未运行时,将无法接收到广播。 **应用场景** 广播在Android中广泛应用,比如系统级别的事件(如网络状态改变、电池电量变化)、应用程序内部通信以及在不同应用间的数据传递等。自定义广播可以用于实现特定功能,例如在应用中发送“求救”信号或者其他定制的消息传递。 总结,理解并掌握Android的广播机制是开发中必不可少的技能,它能够帮助开发者实现应用间的通信和响应系统事件,同时合理选择静态和动态注册可以平衡性能和功能需求。