部分的な wake lock は PowerManager
API のメカニズムであり、デベロッパーはこれを使用して、デバイスのディスプレイがオフになった後も(原因がシステム タイムアウトであってもユーザーが電源ボタンを押したことであっても)CPU が動作し続けるようにすることができます。アプリで部分的な wake lock を取得するには、PARTIAL_WAKE_LOCK
フラグを指定して acquire()
を呼び出します。アプリがバックグラウンドで実行されているときに部分的な wake lock が長時間保持されると、部分的な wake lock は「停止」します(アプリのどの部分もユーザーに表示されなくなります)。この状態ではデバイスが省電力状態にならないため、デバイスの電池が消耗します。部分的な wake lock は必要なときにのみ使用し、不要になったらすぐに解放する必要があります。
アプリで部分的な wake lock が停止している場合、このページのガイダンスが問題の診断と解決に役立ちます。
問題を検出する
アプリの部分的な wake lock が停止したことを常に把握できるとは限りません。アプリをすでに公開している場合は、Android Vitals が問題の発見に役立ちます。
Android Vitals
Android Vitals を使用すると、アプリで部分的な wake lock が停止しているときに、Google Play Console を介してアラートを受け取ることができます。これは、アプリのパフォーマンスを改善するために役立ちます。Android Vitals は、バックグラウンドでアプリが実行されているときに、バッテリー セッションで 1 時間に及ぶ部分的な wake lock が少なくとも 1 回発生すると、部分的な wake lock が停止したと報告します。
バッテリー セッションの定義は、プラットフォームのバージョンによって異なります。
- Android 10 のバッテリー セッションは、指定された 24 時間以内に受信したすべてのバッテリー レポートが集約されたものです。バッテリー レポートは、2 回の充電(バッテリー残量が 20% 未満から 80% 超まで、または任意の充電レベルから 100% まで)の間隔を指します。
- Android 11 のバッテリー セッションは、固定の 24 時間です。
表示されるバッテリー セッション数は、アプリの測定対象ユーザー全員の集計値です。Google Play が Android Vitals のデータを収集する方法については、Play Console のドキュメントをご覧ください。
アプリが部分的な wake lock を過度に停止していることがわかったら、問題に対処することが次のステップになります。
問題を解決する
ウェイクロックはデバイスのバッテリーを消耗させる可能性があるため、代替手段がある場合はウェイクロックを使用しないでください。デバイスをスリープ状態にしない適切な API を選択するのドキュメントを参照して、アプリに最適なソリューションを見つけてください。
どうしても wake lock を使用する必要がある場合は、wake lock のベスト プラクティスに従って、wake lock がデバイスの効率を損なわないようにしてください。特に、取得したすべてのデバイスが解放されていることを確認し、できるだけ早くロックを解除してください。
コードの問題を解決したら、次のツールを使用して、アプリが wake lock を正しく解放することを確認します。
dumpsys - デバイス上でシステム サービスのステータスに関する情報を提供するツール。wake lock のリストを含む電源サービスのステータスを確認するには、
adb shell dumpsys power
を実行します。Battery Historian - Android バグレポートの出力を解析して、電源関連のイベントを視覚的に表示するツール。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- フリーズしたフレーム
- 継続的インテグレーションでベンチマークを実行する
- Macrobenchmark を使用せずにベースライン プロファイルを作成して測定する