2015-08-13 41 views
4

我稍微修改了此應用:https://github.com/commonsguy/cw-omnibus/tree/master/JobSchedulerAndroid M打盹狀態本身是否有多個狀態?

它使用setExactAndAllowWhileIdle和時間表報警熄滅每隔1分鐘並記錄其設置報警。

根據Doze文檔,如果此應用程序在手機處於打盹模式下運行,則每15分鐘只應該關閉一個鬧鐘。我沒有看到那種行爲。

在運行Android M.開始該應用和整個報警調度處理之後AA關係5,我把手機進入打盹使用所提供的命令ABD ...

ADB殼dumpsys電池拔掉 ADB殼dumpsys deviceidle步驟 adb shell dumpsys deviceidle -h

...從日誌中,我看到大約30分鐘的警報每分鐘一次關閉,最後他們相隔15分鐘大約一個小時。然後每分鐘回到一次,然後再回到15分鐘。測試期間,手機完全不受干擾。

有誰知道這是爲什麼?我的印象是這些adb命令後,手機會立即進入打盹模式,並且這些鬧鐘將在開始15分鐘後關閉。

感謝您的幫助。

+0

FWIW,我沒有用下面的命令困擾,因爲我不信任他們。我只是讓設備在自己的(缺乏)電源下進入打盹模式。我不確定你從哪裏得到你的每15分鐘一點,因爲我無法在[行爲改變文檔]中找到對「15」的引用(http://developer.android.com/preview/行爲changes.html)。 – CommonsWare

+0

@CommonsWare感謝您的重播。我沒有明確解釋這一部分,我的錯誤。在setExactAndAllowWhileIdle方法的快速文檔中指出:「在正常的系統操作下,它不會在每分鐘內發送這些報警(在這種情況下,每個此類未決報警都會發送);當處於低功耗空閒模式時,持續時間可能會明顯更長,如15分鐘「 –

+0

根據我的經驗,在實際打盹模式下,事件之間的差距要長得多,從一小時到幾小時。 – CommonsWare

回答

1

首先,相關的adb命令文檔不完整,正如您在ISSUE 2930的鏈接中指出的那樣。

下面的命令僅僅打印使用信息:

adb shell dumpsys deviceidle -h 

以下命令將顯示包括先決條件的當前狀態(啓用,不動,不充電,屏幕關閉),用於進入IDLE:

adb shell dumpsys deviceidle 

    Settings: 
    ... 
    Whitelist (except idle) system apps: 
    ... 
    Whitelist (except idle) all app ids: 
    ... 
    mEnabled=true 
    mForceIdle=false 
    mSigMotionSensor=null 
    mCurDisplay=... 
    mScreenOn=false 
    mCharging=false 
    mSigMotionActive=false 
    mState=INACTIVE 

這表明您是否需要進行更多設置。例如。仿真器的電源按鈕似乎需要2或3次點擊才能獲得mScreenOn=false

對空閒模式下的命令的步驟,但ISSUE 2930解釋說,你需要一步多次去激活,IDLE_PENDING,傳感,則空閒:

adb shell dumpsys deviceidle step 

以下命令將迫使它進入閒置:

adb shell dumpsys deviceidle force-idle 

順便提一下,Doze and App Standby的開發者文檔最近有所改進。

1

當設備處於空閒模式時,setExactAndAllowWhileIdle的速率限制不同。我猜這是30分鐘讓您的手機通過Doze進入閒置模式,此時您只能每15分鐘致電setExactAndAllowWhileIdle一次。

在打盹模式下,您的手機會定期喚醒,保持時間長達10分鐘。在這10分鐘內,它將從空閒模式中喚醒,您的速率限制將會每分鐘調整一次。維護窗口結束後,您會看到它每15分鐘返回一次。

空閒維護窗口的文檔中描述:http://developer.android.com/training/monitoring-device-state/doze-standby.html#understand_doze