Android dozeモードについてADBを使って調べる

Android dozeモード。

憎いですね。

バッテリーセーブのためにAndroid Mから導入されましたが、最近の端末(Android Xとか以降)になって、非常に幅を利かせている気がします。

バックグラウンドでアプリを動作させたいアプリ開発者にとっては、もう、本当にやめて頂きたい機能です。

さて、先だって、次の記事を読みました。これ、非常に勉強になりましたね。内部的に、どのようにシステムがDoze(Idle)状態になるのか、ということを説明してくださっています。All英語ですが、読む価値あります。(`・ω・´)

https://www.protechtraining.com/blog/post/diving-into-android-m-doze-875

で、ここでも紹介されている

$ adb shell dumpsys deviceidle

が非常にいろいろなことがわかります。

adb shell dumpsys deviceidle やってみる

さて、上記で出力されている内容を解説します。(公式ドキュメントとかないので推測なんですけど。あったら教えて!)

最初のあたりですが

Settings:
light_after_inactive_to=+3m0s0ms
light_pre_idle_to=+3m0s0ms
light_idle_to=+5m0s0ms
light_idle_factor=2.0
light_max_idle_to=+15m0s0ms
light_idle_maintenance_min_budget=+1m0s0ms
light_idle_maintenance_max_budget=+5m0s0ms
min_light_maintenance_time=+5s0ms
min_deep_maintenance_time=+30s0ms
inactive_to=+30m0s0ms… 以下続く

となっていて、おそらく、いつアイドル状態になるのか、という設定が表示されています。モニターの電源をいつ切るかともあるみたいですね。

この端末では、30m にinactive_to なので、30分後にインアクティブという状態になります。

あと、これも役立つ!Idling history というのもあります。

Idling history:         
deep-idle: -5h33m20s697ms
normal: -5h15m8s32ms (alarm)
deep-idle: -5h0m2s802ms
deep-maint: -4h0m10s231ms
deep-idle: -3h59m40s8ms
normal: -3h23m45s722ms (notification interaction)
deep-idle: -24m29s944ms
normal: -23m37s96ms (alarm)

いや、これすごくないですか?ここしばらくの、端末がアイドル状態だったのか、Dozeのメンテナンス枠だったのか、などがわかります。

そして、ホワイトリストにあるアプリがなんなのかが続きます。この辺りは、ほかのサイトさんでも詳しいので割愛します。

Whitelist (except idle) system apps:
jp.co.nttdocomo.lcsapp
com.nttdocomo.android.wipe
com.lge.sizechangable.weather.platform
com.nttdocomo.android.anmane2
com.android.providers.calendar
com.android.providers.downloads

最後に、今の端末の状態(たぶん)があります。

mLightEnabled=true  mDeepEnabled=true
mForceIdle=false
mUseMotionSensor=true mMotionSensor={Sensor name="LGE Significant Motion Detector Sensor", vendor="qualcomm", version=1, type=17, maxRange=1.0, resolution=1.0, power=0.025, minDelay=-1}
mScreenOn=false
mScreenLocked=true
mNetworkConnected=true
mCharging=true
mMotionActive=false
mNotMoving=true
mLocating=false mHasGps=true mHasNetwork=false mLocated=true
mLastGpsLocation=Location[gps 35.142360,139.631290 hAcc=0 et=+2d4h20m18s373ms alt=0.0 vel=13.89 bear=0.0 vAcc=??? sAcc=??? bAcc=??? mock]
mState=ACTIVE mLightState=ACTIVE
mInactiveTimeout=+30m0s0ms

この時点で、端末の状態はACTIVEということになってますね。端末がスリープになってなくて、画面がONで動作させてます。

強制的にDozeモードにするコマンドは

adb shell dumpsys deviceidle force-idle

ですが、これをやると、さっきの最後のmStateが

mState=IDLE

になります。

開発が、少しはかどりますね!

Android Studio Android SDKの場所

Android Studio 4.2

Android SDKがインストールされている場所が知りたいことがあると思います。

そんな時は、SDK Managerを立ち上げましょう。

(File→Settings→Appearance &Bahavior→System Settings→Android SDKでも行けます)

表示されるSDK Platformsの上のほうに、書いてあります。

Android SDKの場所

PHPStormでUML図を書く

1. 経緯

現在、取り組んでいる開発でUML図書きたいなと思いました。
開発環境を、できるだけPHPStormで完結させるようにしていたので、どうせならUML書くのもPHPStormでやろうと調べました。

2. PlantUML

UMLを書くことに特化した言語です。
書いたコードを読み取り、UML図をレンダリングします。
参考:https://plantuml.com/ja/

3. 導入方法

① PHPStormにPlantUMLのプラグインをインストールする。

PHPStormの File > Settings > Plugins から「PlantUML integration」というプラグインをインストール&PHPStormの再起動を行います。

② Graphvizをインストール

シーケンス図(クラス間のやり取りを時系列で表した図)以外をレンダリングしたい場合、必要になるそうです。こちら からダウンロードできます。

③ PlantUMLファイル作成

他のファイルを追加するときと同じ要領で作成できます。
New > PlantUML File を選択し、ファイル名を入力します。
ここで、作りたい図がどれなのか選択すると、それに応じたテンプレートが自動で作成されます。

4. まとめ

今回PHPStormでPlantUMLを書き、UML図を作成するところまで行いました。コードベースで作成ということでデザインも崩れにくいですし、バージョン管理もしやすいのが良いですね。

beeceptorが便利だった件

webhookを使って何か便利にしたいとき、beeceptorを使えば、爆速で実現することができます。

https://beeceptor.com/

アクセスすると、下記のような画面が表示されます

①赤丸部分にエンドポイントとなる名前を入力し、青い「Create Endpoint」をクリック

②画面遷移後、エンドポイントのURLが表示されるのでこれをコピーして、webhookの指定URLへ貼り付け

③この画面のまま待機し、POSTやGET等でこのエンドポイントに投げると結果が表示。

どんな内容が投げられてくるのかわからない・仕様が明記されていない場合でも、単純明快(*^^*)

初めてのPHP サンプルコードの在処

サンプルコードを写経する作業がきついので、サンプルコードを引っ張ってきて動作確認をしたいときありますよね?

そんな時はこちら
リンク[https://github.com/oreillymedia/Learning_PHP]

こんな…ありがとうございます!なんていうのは少し早くて、対応表の見方が少々難解なので書いておきます。

display-code/に各章に記載してるサンプルコードがあります。また、そのディレクトリ下(例: display-code/ data-groups←4章を指す)に、toc.txtなるものが存在します。こちらは、各章内のサンプルコードとの対応表です。