簡體   English   中英

打盹模式處理

[英]Doze mode handling

我正在開發一個應用程序,它使用AlarmManager在后台生成一些服務。 時序對我們的應用程序非常重要,功能無法等待下一個維護窗口發生。 要求用戶將應用程序列入白名單不是問題,但不能解決暫停警報的問題。 電池消耗也不是一個大問題。

我想到的第一個可能的解決方案是生成一個始終運行的前台服務來處理服務的重新安排而不是AlarmManager,但這樣做會改變我們應用程序的大部分基礎結構,對我們來說是不可行的。

我剛剛實現的當前修復是發送高優先級推送通知,並在接收消息時,完全喚醒鎖定並打開屏幕以打破打盹模式。

我想知道是否有另一種打破打盹模式的方法? 也可以不用喚醒鎖? 實施上述解決方案會產生一些可能的后果嗎?

PS我正在使用UrbanAirship進行推送通知。

您無法“中斷”/停止/禁用打盹模式,但有些方法可以在設備打瞌睡時臨時解除應用程序的限制。

  1. 高優先級FCM消息。

通過FCM高優先級消息,您可以可靠地喚醒應用程序以訪問網絡,即使用戶的設備處於打盹狀態或應用程序處於應用程序待機模式。 在Doze或App Standby模式下,系統傳遞消息並使應用程序臨時訪問網絡服務和部分喚醒鎖,然后將設備或應用程序返回到空閑狀態。

高優先級FCM消息不會影響打盹模式,並且它們不會影響任何其他應用程序的狀態。 這意味着您的應用可以使用它們進行有效通信,同時最大限度地減少系統和設備對電池的影響。

  1. 使用andAllowWhileIdle設置andAllowWhileIdle警報。

Doze特別可能影響AlarmManager警報和計時器管理的活動,因為當系統處於Doze時,Android 5.1(API級別22)或更低級別的警報不會觸發。

為了幫助安排警報,Android 6.0(API級別23)引入了兩個新的AlarmManager方法:setAndAllowWhileIdle()和setExactAndAllowWhileIdle()。 使用這些方法,您可以設置即使設備處於打盹狀態也會觸發的警報。

請注意,打盹模式下兩個警報之間的最小間隔為9分鍾。


對於這兩種情況,您的應用程序將在短時間內恢復為完整功能(意味着:打盹限制不適用),當該時間到期時,操作系統將恢復打盹限制。

請注意,在這些“喚醒”期間,您無需打開屏幕即可執行代碼。

我手邊沒有消息來源,但我相信我說的短暫時間是~10秒。

來源和額外閱讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM