はじめに
バックグラウンドで動作するAndroidアプリを作る場合、DozeモードやApp Standbyに気を付けなければなりません。その際検証するのですが、自然にDozeモードやApp Standbyになるのを待ってるのは大変なので、検証するコマンドがあります。 これらは検索すれば見つかります。ただいまいちまとまって無かったので、今回まとめてみました。
DozeモードやApp Standby自体の仕様については、下記をご確認下さい。
あとはここが詳しいです。
Dozeモード 検証 コマンド
1.Dozeモードにする前に、電源プラグに刺さったままだとDozeモードにならないので下記を行います。
1 2 |
給電状態をOFF ※表示上刺さってないことになりますが充電はされます。 $ adb shell dumpsys battery unplug |
2.画面を消灯する。電源ボタン押してスクリーンをOFFにして下さい。
>深いDozeを検証する場合
3−1.まず下記を実行します。
1 |
$ adb shell dumpsys deviceidle enable |
3−2.実行する度に状態が変化します。IDLEまで行くと IDLE→IDLE_MAINTENANCE→IDLEを繰り返します。
1 2 |
IDLEがDozeモードなのでそれが表示されるまで叩きましょう(3回くらい) $ adb shell dumpsys deviceidle step |
3−3.検証が完了したら、有効にしたものを無効にします。
1 |
$ adb shell dumpsys deviceidle disable |
>浅いDozeを検証する場合
基本深いDozeと同じです。最後にlightが付きます。
1 2 3 4 5 6 |
3−1. $ adb shell dumpsys deviceidle enable light 3−2. $ adb shell dumpsys deviceidle step light 3−3. $ adb shell dumpsys deviceidle disable light |
4.Dozeモードの状態確認
1 2 |
現在端末がどの状態なのかを確認できます $ adb shell dumpsys deviceidle | grep State |
1 2 3 4 5 6 7 8 9 10 |
下記が表示されます。 mState={深いDozeのステータス} mLightState={浅いDozeのステータス} それぞれステータスはこれです。 ACTIVE: スクリーンが点灯している INACTIVE: スクリーンが消灯している IDLE_PENDING: INACTIVEの期間を過ぎて、IDLEを待ってる状態 SENSING: 不明 IDLE: Dozeモード状態 IDLE_MAINTENANCE: メンテナンスウィンドウ |
5.検証完了後に給電状態に戻す
1 2 |
給電状態をON $ adb shell dumpsys battery reset |
App Standbyについて
こちらは公式にコマンドがあるのですが、App Standbyはアプリを使ってない時に発生するものなのに、アプリを起動している時にしか有効にならない(バグ?)ので、有効にするのはコマンドで行いません。
1 2 |
一応そのコマンドはこれです。 $ adb shell am set-inactive {アプリのパッケージ名} true |
1.こちらも給電されてない状態が条件になりますので、給電状態をOFFにします。
1 |
$ adb shell dumpsys battery unplug |
2.アプリをバックグラウンド状態にする。(アプリ起動中にホームボタンを押して裏に回った状態)
3.設定アプリを開き、開発者オプション→休止中のアプリを開きます。(無効なアプリ or 非可動のアプリと表示される場合もあります)
4.対象のアプリを探してタップし、無効にします。
5.状態を確認します。
1 2 3 4 5 6 |
$ adb shell am get-inactive {アプリのパッケージ名} このように表示されます。 Idle=true true: App Standby有効 false: App Standby無効 |
6.検証後は給電状態を元に戻します。
1 2 |
$ adb shell dumpsys battery reset ※設定から無効にしたアプリは、アプリを起動すれば有効に戻ります。 |
最後に
簡単にまとめるつもりでしたが、結構長くなってしまいました。Dozeモードはバックグラウンドで色々やりたい場合、アプリ開発者泣かせではあるのですが、Androidユーザからすると嬉しいですね。また、こういうものがあるのでバックグラウンドでの機能を作る時はお気をつけて。