待机模式对后台/前台服务的影响,带/不带部分/完全唤醒锁定是如何影响的?

26
这是一个简单的问题,因为在G+(这里)上有一篇很长的帖子,而官方文档中缺乏信息(这里):
当设备进入“待机”模式时,应用程序的服务会发生什么情况?
对于后台/前台服务(绑定/未绑定,已启动/未启动),具有/不具有部分/完全唤醒锁的情况下,它会做什么?
例如,为了在设备的屏幕关闭时播放音频流,您会怎么做?如果音频流不是来自本地文件而是来自网络呢?
考虑到Google开发人员提出的声明:

运行前台服务(带相关通知的服务)的应用程序不受待机限制。

-然而在此之后还有很多讨论,声称这并不完全正确,我认为很难知道应用程序需要执行哪些特殊的后台操作。

我已经尝试解决我的应用程序中的这个问题两周了,但是我没有找到解决方案... 我有一个广播流应用程序,但我不知道该如何解决这个问题.. :( - Terranology
@Terranology 我在某处读到Android N在Doze模式下存在一个bug,你的服务应该在新进程上运行才能解决这个问题。你试过了吗? - android developer
1个回答

17

具有当前运行前台服务的进程应该不受Doze影响。绑定/未绑定,已启动/未启动和唤醒锁都不会影响此白名单处理过程。

然而,在Android M设备上存在一个问题,即当前台服务与顶部活动位于同一进程且被错误地休眠时,前台服务未被正确加入白名单。

修复程序在AOSP上提供,并将包含在Android N版本中。OEM需要将此补丁集成到他们生产的任何Android M版本中。


3
未明确指定为前台服务的服务(即未调用[startForeground](https://developer.android.com/reference/android/app/Service.html#startForeground(int, android.app.Notification))的服务)在应用进入假寐模式时会受到所有限制,它们不在白名单内。音乐播放应用在主动播放音频时应始终作为前台服务,并强烈建议将其置于单独的进程中(这样做不仅是一个好主意,而且是一种消除错误的方法),参考2016 I/O大会的媒体播放最佳实践演讲 - ianhanniballake
2
Doze 影响所有应用程序,无论它们使用什么 targetSdkVersion。 - ianhanniballake
2
@user1026605 - 不,那是设置服务使用的进程的唯一方法。 - ianhanniballake
3
通过示例应用程序测试,我有一个持续运行的后台粘性服务(服务具有无限线程),它执行工作并休眠1分钟,然后再次唤醒以执行其工作,但是后台服务仍会被终止,运行的线程也会被挂起。尝试将服务在单独的进程中运行,但是没有成功。如果有人能够确认此行为,因为此行为未在任何地方记录? - Amritesh
2
前台服务是否需要(部分)唤醒锁定?我弄不清楚。 - Florian Walther
显示剩余17条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接