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

關於這個例子,好的。關於服務,這是什麼意思?這是否意味着服務將被停止?或者這是否意味着整個過程被凍結(停留在相同的堆棧狀態),然後解凍(恢復運行)?互聯網連接呼叫會發生什麼?他們是否拋出異常? –