本文主要是介绍Android Broadcast原理分析之Android新版本限制(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 概述
- 官方文档介绍
- 源码解析
- 适配
1. 概述
随着Android版本不断迭代,Android对后台的管控越来越严格,对于APP而言,通常来讲后台活跃的主要是广播以及service,而Google对于后台的管控也着重就在这两个组件上,本篇文章主要介绍Android O上对于广播的新增限制与管控。
升级到Android O之后,可能会发现有些广播收不到了,查看log发现会有如下一些信息"Background execution not allowed..
"打出来,原因正是由于Android对后台越来越严格。
2. 官方文档介绍
https://developer.android.com/about/versions/oreo/background#broadcasts
Google官方的说法是这样的:
如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,这会引发问题;触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验。
可以看到,Google也认识到广播这个机制的存在对于用户的使用体验包括性能以及功耗方面的影响比较大,所以才致力于不断的增加后台的限制。
3. 源码解析
3.1 ActivityManagerService.broadcastIntentLocked
if (getBackgroundLaunchBroadcasts().contains(action)) {intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
}private ArraySet<String> getBackgroundLaunchBroadcasts() {if (mBackgroundLaunchBroadcasts == null) {mBackgroundLaunchBroadcasts = SystemConfig.getInstance().getAllowImplicitBroadcasts
这篇关于Android Broadcast原理分析之Android新版本限制(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!