簡體   English   中英

測試打盹和待機模式

[英]Testing doze and standby mode

我關閉了運行Android M的Nexus 5設備的屏幕顯示,然后發出以下命令。

im17-x0:~ r.j$ adb shell dumpsys battery unplug
im17-x0:~ r.j$ adb shell dumpsys deviceidle step
Stepped to: IDLE_PENDING
im17-x0:~ r.a$ adb shell dumpsys deviceidle step
Stepped to: SENSING
im17-x0:~ r.a$ adb shell dumpsys deviceidle step
Stepped to: IDLE

理想情況下,我的設備應該進入空閑模式。 但我在將它置於空閑模式並且仍在運行之前啟動了CountDownTimer 網絡訪問仍然在我的手機中(使用功能檢查)

為什么設備不進入打盹模式? 這里選擇備用模式的選項也具有相同的效果。 為什么?

同樣在該計時器中,如果我檢查isDeviceIdleMode() ,它返回true。

我在這里有一些提示:

網絡訪問

我建議通過實際嘗試網絡呼叫並將其注銷來測試網絡訪問。 在空閑模式下,以編程方式檢查網絡訪問存在文檔錯誤:
https://code.google.com/p/android-developer-preview/issues/detail?id=3164

檢查空閑/打盹模式

沒有太多的文檔,但是有一些方法沒有被Doze模式靜音。 使用CountDownTimer可能就是其中之一。 我嘗試使用setExact()設置警報,當應用程序處於空閑模式時,已記錄該警報不起作用 如果您可以在該警報觸發時記錄某些內容,那么您肯定不會處於空閑模式。

讓我知道這對你有用嗎!

截至目前,行為看起來像這樣

  1. isDeviceIdleMode()將返回true。
  2. 應用程序中的網絡可用性檢查始終返回true。(使用功能檢查)
  3. 當設備進入和退出打盹模式時,網絡沒有變化(沒有網絡廣播)。 但是,當設備進入並退出打盹模式時,會播放廣播(打盹廣播)。
  4. 但是我們無法在打盹模式下進行網絡調用。(嘗試使用HttpUrlConnection

對於在打盹模式下返回true的getNetworkInfo() ,Android中會報告錯誤( 鏈接

我認為在打瞌睡時網絡仍然會連接回來(如果你有網絡連接),但是如果你嘗試做除GCM以外的任何事情,它會給你一個錯誤。

REWRITE:我的原始答案假設您的設備實際上不處於打盹模式,因此鏈接到改進的進入Doze模式的指令Diving Into IDLE_MAINTENANCE關於允許網絡活動運行的IDLE_MAINTENANCE狀態。

我的新的假設是:(1)當deviceidle step回復Stepped to: IDLE時,設備處於打盹模式,和我們預期(2)打盹模式不行為。

谷歌已經更新了針對Doze和App Standby的優化頁面,但它並沒有與你的發現相吻合。 他們提供了有關了解打盹模式對您的應用意味着什么的更多信息,以及后台工作,鬧鍾和Android應用的流程圖 另見問題2225

我擔心這仍然不能解釋你的結果。 打盹模式很復雜,記錄不足。

問:您的應用是否已列入白名單? Doze和App Standby頁面的優化說:

白名單中的應用可以使用網絡並在Doze和App Standby期間保留部分喚醒鎖定。

BTW,命令

adb shell dumpsys deviceidle

顯示當前狀態(例如IDLE )和其他信息,包括充電,動作和屏幕開/關狀態,這些是打盹的先決條件,也是白名單 這對調試很有用。

以下是有關空閑模式的一些有用信息:

deviceidle - 是一個新的Android服務,它將始終運行並偵聽多個系統事件,這些事件可以在空閑模式(也稱為打盹模式)中觸發/退出:

1.Screen on/off
2.Charging status
3.Significant motion detect

DeviceIdleController - 當設備處於喚醒和使用狀態時,控制器處於ACTIVE狀態。 外部事件,如不活動超時,用戶關閉屏幕,運動檢測......將驅動狀態機進入INACTIVE狀態。 此狀態機包含七種狀態:

1.ACTIVE - Device is in use, or connected to a charge source.
2.INACTIVE - Device has recently come out of the active state, meaning that user turned off the display or unplugged it.
3.IDLE_PENDING - Hold on, we are about to enter idle mode.
4.SENSING
5.LOCATING
6.IDLE - Device is idle.
7.IDLE_MAINTENANCE - Window is open for applications to do processing. Then will back to IDLE.

空閑狀態 - 為了使設備進入空閑狀態,您可以使用以下adb命令:

>adb shell dumpsys battery unplug
>adb shell dumpsys deviceidle force-idle

活動狀態 - 為了使設備恢復活動狀態,您可以模擬以下關鍵事件:

> adb shell input keyevent KEYCODE_WAKEUP

我還需要一個快速選項來在Active和Idle狀態之間切換,所以我為這些目的寫了一個批處理腳本adbIdleModeSwitch.bat ,你可以下載並使用它: https//drive.google.com/file/d/0B81qFnPX_eUUYTMxOTd1UG94NVk/view

暫無
暫無

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

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