Android BroadcastReceiver详解与使用示例

需积分: 1 0 下载量 152 浏览量 更新于2024-09-11 收藏 2KB TXT 举报
"BroadcastReceiver是Android系统中的一个关键组件,用于接收并响应系统或应用程序广播的意图(Intent)。BroadcastReceiver可以动态或静态地注册,并在接收到特定的广播事件时执行相应的操作。当BroadcastReceiver的onReceive()方法被调用时,表明一个广播已到达,开发者可以在该方法内处理接收到的广播事件。BroadcastReceiver有两种注册方式:在AndroidManifest.xml文件中静态注册和在代码中动态注册。静态注册的BroadcastReceiver在应用启动时即生效,即使应用未运行也能接收到广播。动态注册的BroadcastReceiver则只在注册后生效,应用退出或取消注册后将无法接收到广播。" BroadcastReceiver的工作原理: BroadcastReceiver是Android系统中的一个观察者模式实现,它监听并响应系统的广播事件。这些事件可以是系统级别的(如设备启动、网络状态变化等)或者应用程序自定义的。当一个广播被发送出去,所有注册了相应IntentFilter的BroadcastReceiver都会收到通知,然后在各自的onReceive()方法中进行处理。onReceive()方法必须快速执行,因为它在一个单独的线程中运行,如果执行时间过长,可能会阻塞系统广播的传递。 BroadcastReceiver的注册与使用: 1. 静态注册:在AndroidManifest.xml文件中声明BroadcastReceiver,并设置对应的IntentFilter,这样BroadcastReceiver在应用程序安装后就会自动生效。例如: ```xml <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.MyBroadcastReceiver" /> </intent-filter> </receiver> ``` 在这种情况下,BroadcastReceiver会持续监听指定的ACTION,即使应用没有运行,只要满足条件的广播发出,它也会被唤醒。 2. 动态注册:在代码中创建BroadcastReceiver实例,然后通过registerReceiver()方法进行注册,通常在需要的时候进行。例如: ```java IntentFilter filter = new IntentFilter(); filter.addAction("com.regist.BroadcastReceiver"); MyBroadcastReceiver receiver = new MyBroadcastReceiver(); registerReceiver(receiver, filter); ``` 动态注册的BroadcastReceiver只有在注册后才能接收广播,当不再需要时,需要通过unregisterReceiver()方法取消注册,以避免内存泄漏。 发送广播: 发送广播通常通过Intent对象完成,指定广播的ACTION。发送系统广播或自定义广播的方式类似: ```java Intent intent = new Intent("com.regist.BroadcastReceiver"); sendBroadcast(intent); ``` 或者,如果需要传递额外的数据,可以使用Intent的putExtra()方法添加 Bundle,然后在BroadcastReceiver的onReceive()方法中通过Intent的getExtras()获取。 BroadcastReceiver的生命周期非常短暂,onReceive()方法执行完毕后,BroadcastReceiver实例就会被销毁。因此,BroadcastReceiver不适合执行耗时的操作,这些任务应该交由Service或Worker线程处理。 BroadcastReceiver是Android中用于跨组件通信的重要工具,它允许应用在后台接收并响应各种系统和应用级别的广播事件,从而实现对系统状态变化的实时监控和响应。通过合理的注册和使用,BroadcastReceiver可以极大地增强应用的功能和用户体验。