4

このアプリを少し変更しました: https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler

setExactAndAllowWhileIdle を使用してアラームを設定し、アラームを 1 分ごとに鳴らしてログに記録するようにスケジュールします。

Doze のドキュメントによると、電話が Doze モードのときにこのアプリが実行されている場合、アラームは 15 分ごとに 1 つだけ鳴るはずです。その動作は見られません。

Android M を実行している aa nexus 5 で、アプリとアラーム スケジューリング プロセス全体を開始した後、提供された abd コマンドを使用して電話を Doze 状態にしました...

adb shell dumpsys battery unplug adb shell dumpsys deviceidle step adb shell dumpsys deviceidle -h

...ログから、1 分間に 1 回約 30 分のアラームが鳴り、最終的には 15 分間隔で約 1 時間アラームが鳴っているのを確認しました。次に、1 分に 1 回に戻し、15 分間隔に戻します。テスト中、電話はまったく邪魔されませんでした。

これがなぜなのか誰か知っていますか?これらの adb コマンドの後、電話はすぐに Doze モードになり、開始から 15 分後にアラームが鳴るという印象を受けました。

ご協力いただきありがとうございます。

4

2 に答える 2

1

setExactAndAllowWhileIdleデバイスがアイドル モードの場合、レート制限は異なります。お使いの携帯電話が Doze 経由でアイドル モードに入るまでに 30 分かかると思います。この時点で、通話setExactAndAllowWhileIdleは 15 分に 1 回に制限されます。

Doze モードでは、電話機は最大 10 分間のアイドル メンテナンス期間、定期的に起動します。この 10 分間はアイドル モードから復帰し、レート制限は 1 分に 1 回に調整されます。メンテナンス ウィンドウが終了すると、15 分ごとに 1 回に戻ります。

アイドル メンテナンス ウィンドウについては、次のドキュメントで説明されています: http://developer.android.com/training/monitoring-device-state/doze-standby.html#understand_doze

于 2015-10-13T19:32:16.437 に答える
1

ISSUE 2930へのリンクで指摘したように、関連する adb コマンド ドキュメントは不完全です。

次のコマンドは、使用情報を出力するだけです。

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.

次のコマンドは IDLE モードに進みますが、ISSUE 2930では、INACTIVE、IDLE_PENDING、SENSING、IDLE の順に進むには複数回ステップする必要があると説明しています。

adb shell dumpsys deviceidle step

次のコマンドは、強制的にアイドル状態にします。

adb shell dumpsys deviceidle force-idle

ところで、Doze と App Standbyに関する開発者向けドキュメントは最近改善されました。

于 2015-10-05T05:43:49.523 に答える