12

这是一个简单的问题,看到有这个巨大的岗位上G +(here),以及缺乏对官方的文档信息(here):打盹模式如何影响背景/前景服务,有/无部分/完整唤醒锁?

发生了应用程序的服务是什么,当设备进入“打盹“模式?

它对背景/前景服务(绑定/非绑定,已启动/未启动)有影响,有/无部分/完全唤醒?

例如,您将如何创建一个在设备屏幕关闭时播放音频流的服务?如果音频流不是来自本地文件,而是来自网络?

看到,有一个要求由谷歌开发者:

应用程序已经运行前景的服务(与关联 通知)不受打盹的限制。

- 之后有很多讨论,声称这并非完全正确,我认为知道特殊的后台操作应用程序应该做什么是相当混乱的。

+0

我想在我的应用程序解决这个问题2周,我没有找到解决方案... 我有一个广播流应用程序,我不知道该怎么解决这个问题。:( – Terranology

+0

@Terranology我曾经在某处看到过,Android N在Doze模式下有一个错误,为了解决这个问题,你的服务应该运行在一个新的进程上。你试过了吗? –

回答

8

具有当前正在运行的前台服务的进程应该不受打盹的影响。绑定/未绑定,已启动/未启动以及唤醒锁不会影响此白名单进程。

但是,在Android M设备上有an issue,前台服务在顶级活动处于相同进程并且不适当打瞌睡时,前台服务未正确列入白名单。

该修补程序可用on AOSP,并将包含在Android N版本中。将由OEM将这个补丁集成到他们生产的任何Android M版本中。

+1

然后,后台服务会发生什么?我提到的例子(播放内容的音乐应用程序,从区域设置/远程文件)的基础结构解决方案? –

+2

不是专门用于前台服务的服务(即,他们没有调用[startForeground](https:// developer。 android.com/reference/android/app/Service.html#startForeground(int,android.app.Notification)))接收所有适用于打瞌睡的限制 - 它们是n没有列入白名单。根据2016年I/O媒体播放演讲中的最佳做法,音乐播放应用程序应始终**在前台服务中播放音频(https://www.youtube.com/watch?v=iIKxyDRjecU ),强烈建议在一个单独的过程中(因为这是一个好主意和bug) – ianhanniballake

+0

关于这个例子,好的。关于服务,这是什么意思?这是否意味着服务将被停止?或者这是否意味着整个过程被冻结(停留在相同的堆栈状态),然后解冻(恢复运行)?互联网连接呼叫会发生什么?他们是否抛出异常? –