BroadcastReceiver是Android四大基本组件之一,是一个系统全局的监听器,用于监听系统全局的Broadcast广播消息。BroadcastReceiver有两种注册方式:静态注册和动态注册。静态注册在AndroidManifest.xml清单文件中注册,动态注册在代码中注册。当我们需要一直接收某种广播时,可以使用静态注册方式。
使用unregisterReceiver(BroadcastReceiver receiver)来注销注册,动态注册的广播在应用停止运行后无法接收广播,比如在MainActivity中注册,则应当在MainActivity销毁前,使用unregisterReceiver(BroadcastReceiver receiver)来注销注册。
注意事项:onReceive()方法不能返回任何值或者抛出任何异常;onReceive()方法不能启动任何Activity;onReceive()方法不能启动Service;onReceive()方法不能调用startActivity();onReceive()方法不能调用sendOrderedBroadcast();onReceive()方法不能调用sendStickyBroadcast();onReceive()方法不能调用sendMulticastIntent();onReceive()方法不能调用sendBroadcastAsUser();onReceive()方法不能调用sendEmptyBroadcast();onReceive()方法不能调用sendOrderedBroadcastPerContact();onReceive()方法不能调用sendBroadcastPerContact();onReceive()方法不能调用setResultCode();onReceive()方法不能调用finish();onReceive()方法不能调用finishActivity();onReceive()方法不能调用finishService();onReceive()方法不能调用finishLocalActivityManagerTask();onReceive()方法不能调用retainActive();onReceive()方法不能调用recyclerViewRecycle();onReceive()方法不能调用recyclerViewRecycleFromStack();onReceive()方法不能调用recyclerViewRecycleExternalIncomingBatch();
总结:BroadcastReceiver是一种系统全局的监听器,用于监听系统全局的Broadcast广播消息。它可以接收来自系统和应用的的广播。
Android广播类型有四种:标准广播(Standard broadcasts)、有序广播(Ordered broadcasts)、粘性广播(Sticky broadcasts)和系统广播(System broadcasts)。每种广播类型都有自己的特点和适用场景,选择合适的广播类型可以使我们的应用更加高效和稳定。
标准广播是指发送者发送的广播消息没有指定接收者,所有注册了该广播接收器的应用程序都会收到这条广播消息。有序广播是指发送者可以指定哪些应用程序会接收到这条广播消息,这些应用程序按照发送者的顺序依次处理这条广播消息。粘性广播是指发送者发送的广播消息不会在内存中立即消失,而是一直存在于系统的消息容器里面,等待对应的处理器去处理。系统广播是指Android内置了很多系统级别的广播,我们可以在应用中通过监听这些广播来得到各种系统的状态信息。
在Android 8.0及以上版本中,为了改善用户体验和节省电池,系统对后台服务和广播接收器施加了新的限制。这包括限制后台服务的生命周期和限制广播接收器的启动。因此,开发者需要采取新的策略来适应这些变化。
以下是一些建议:
1. 使用LocalBroadcastManager替代隐式广播:LocalBroadcastManager是用于在不同组件之间发送消息的API,它可以替代隐式广播。通过使用LocalBroadcastManager,可以更好地控制广播的发送和接收,以及减少不必要的广播。
2. 使用JobScheduler、FirebaseJobDispatcher或WorkManager替代隐式广播:这些工具可以帮助开发者管理后台任务,以便在满足新规定的情况下执行操作。例如,可以使用JobScheduler在满足特定条件时执行后台任务,或者使用WorkManager根据设备状态执行后台任务。
3. 在特定情况下允许隐式广播:对于那些不需要在新规定下执行的操作,可以在AndroidManifest.xml文件中为特定的广播接收器添加例外情况。但是,需要注意的是,这种做法可能会导致安全风险,因此需要谨慎使用。
4. 注意广播接收器的安全性:由于新规定对后台服务和广播接收器施加了限制,开发者需要特别注意广播接收器的安全性。例如,避免使用不安全的广播接收器发送敏感数据,或者确保广播接收器只接收来自可信来源的消息。
总之,为了适应Android 8.0及以上版本的新规定,开发者需要采取新的策略来管理后台服务和广播接收器。通过使用LocalBroadcastManager、JobScheduler、FirebaseJobDispatcher或WorkManager等工具,以及在AndroidManifest.xml文件中设置例外情况,开发者可以更好地控制应用程序的行为,同时确保其安全性和兼容性。
从 Android 8.0 开始,系统引入了一个名为“广播接收器自动注册禁用”的功能。该功能要求应用在注册接收器时必须明确其意图过滤器。这意味着应用不能再在代码中动态注册接收器来接收隐式广播。此外,对于需要接收敏感信息的广播(如短信、联系人等),系统可能会要求用户授予相应的权限。因此,在使用广播接收器时,一定要注意保护用户数据的安全。
如果您的应用需要发送大量的推送通知,或者需要向不同平台(如 iOS、Web)的用户发送通知,那么可以考虑使用第三方推送通知服务,如 Firebase Cloud Messaging (FCM)。这些服务提供了丰富的功能和更好的可靠性,可以帮助您更轻松地实现推送通知的功能。
关于广播接收器的使用,静态注册和动态注册是两种常见的方式。静态注册是指在AndroidManifest文件中对BroadcastReceiver进行注册,通常还会加上action用来过滤;而动态注册则是通过Context中的registerReceiver方法来注册BroadcastReceiver 。