Android Vitals を使用してアプリのパフォーマンスや安定性を改善する

  • テスト
  • 開発
  • 分析

パフォーマンスと安定性は、Google Play での良好な評価に直結します。問題を修正し、不正な動作を防止することで、ユーザー エクスペリエンスの向上や評価のアップ、アプリをインストールしたユーザーの定着率の増加につながります。

解説

Android Vitals には、アプリの安定性、電池、ジャンク、スタートアップ時間、権限の拒否に関するパフォーマンス指標が含まれます。このような指標をトラッキングすることで、ユーザー エクスペリエンスに直接影響するアプリの不正な動作を特定し、修正できるようになります。また、調査が必要な異常を示す主な指標が急に変化したときにすぐに気付くことができるほか、類似のアプリのパフォーマンスと比較するためのベンチマークも提供されます。アプリの指標が上昇するとプロモーション性が高まり、Google Play ストアの検索ランキングも向上します。また、Google Play の新着、更新済み、「エディターのおすすめ」のコレクションや、Google Play アワードのノミネート作品に選ばれる可能性も高まります。

主な指標

  • 安定性 | ANR 発生率: 1 日のセッションで少なくとも 1 回の ANR(アプリケーション応答なし)イベントを経験したユーザーの割合(%)。ANR は通常、UI スレッドやバックグラウンド プロセス(ブロードキャスト レシーバ)のデッドロックや遅延によって発生します。
  • 安定性 | クラッシュ発生率: 1 日のセッションで少なくとも 1 回のクラッシュ イベントを経験したユーザーの割合(%)。クラッシュは通常、未処理の例外、リソースの枯渇、アサーションの失敗のほか、予期しない状態によって引き起こされます。
  • レンダリング時間 | 16 ms(60 fps): 1 日にレンダリング時間が 16 ms を超えるフレーム数が 15% 以上に達したユーザーの割合(%)。各フレームの描画前にレンダリング時間がかかりすぎるアプリは、スタッタリングが発生するようになります。レンダリング時間の増加がたまに発生するわずかな時間であれば気付かないこともありますが、レンダリング時間が 150 ms になると知覚可能なスタッタリングが発生します。
  • レンダリング時間 | 700 ms: 1 日にレンダリング時間が 700 ms を超えるフレーム数が 0.1% 以上に達したユーザーの割合(%)。上の説明のとおり、レンダリング時間が増加するとスムーズな描画ができず、ユーザー エクスペリエンスが低下します。レンダリング時間が 700 ms を超えると、ユーザーにはアプリがフリーズしているように見えるおそれがあります。
  • 電池 | 部分的 wake lock: 特定の日に 1 時間以上の wake lock を少なくとも 1 回経験したユーザーの割合(%)。停止する部分的な wake lock が発生すると、アイドル状態のデバイスがスリープ状態にならず、電池を節約できなくなります。
  • バッテリー | wakeup: デバイスをフル充電してから 1 時間あたり 60 回以上の wakeup を経験したユーザーの割合(%)。アプリの寿命を超えて時間ベースの動作を実行するアラームによって頻繁に wakeup が発生すると、アイドル状態のデバイスがスリープ状態にならなくなります。
  • スタートアップ時間: コールド、ウォーム、またはホットのスタートアップ時間が長くなったセッションの割合。さまざまな問題が原因でスタートアップ時間が長くなることがありますが、通常は、アプリの初期化時に大量のワークロードや複雑なロジックを実行することが原因です。
  • 権限の拒否: 1 日の権限セッション数のうち、ユーザーが権限リクエストを拒否した、または [次回から表示しない] を選択した割合。権限の拒否は、権限がリクエストされている理由をユーザーが理解していない、またはユーザーがリクエストを不要または不合理と見なしていることを示す場合があります。

おすすめの方法

  • 不正な動作について考察し、排除する: アプリの開発時は、さまざまな環境でのアプリの動作について考えてみます。たとえば、ハイエンドのフル機能デバイスでアプリの開発とテストを行っている場合、電池や、メモリ、帯域幅、CPU / GPU の機能が制限されたローエンド デバイスではどのように動作するかを考えます。リリース前レポートを使用することで、各リリースの前に、アプリのテスト対象となるデバイスセットを拡充します。
  • アプリの新しいバージョンをリリースした後に Android Vitals を確認する: アプリを公開した後は、Android Vitals を利用することで、実際の本番環境デバイス上のパフォーマンスに関する指標をチェックできます。これにより、特定のデバイスや Android バージョンでユーザーに影響を与えている問題や不正な動作を特定できます。
  • 問題のあるデバイスを特定する: 特定のデバイスやデバイスセット上でのみ、アプリが不正な動作を示すことがあります。ユーザー エクスペリエンスに対する影響の深刻度や、影響を受けるデバイスとユーザーの数に応じて、修正プログラムが利用できるようになるまで、アプリのデバイス ターゲティングを更新することで、対象デバイスを除外することができます。
  • 問題のある Android バージョンを特定する: 特定の Android バージョン上でのみ、アプリが不正な動作を示すことがあります。ユーザー数の少ない Android の古いバージョンの場合は、アプリを更新して、不正な動作を排除するか、アプリのマニフェストの <uses-sdk> 要素内の android:minSdkVersion 属性を更新して、アプリが不正な動作を示さない API レベルに限定するようにします。Android の新しいバージョンの場合は、<uses-sdk> 要素の android:maxSdkVersion 属性を更新して新しいバージョンを除外するように設定するのではなく、必ずアプリを更新して、不正な動作を修正するようにしてください。
  • クラッシュ レポート ツールを使用して、クラッシュや ANR を特定し、トレースする: Firebase Crash ReportingCrashlytics などのクラッシュ レポート ツールと、Android Studio デバッグツールを使用して、クラッシュや ANR につながるシナリオを可能な限り多数特定し、トレースします。
  • JobScheduling API を使用して、wake lock と wakeup を回避する: JobScheduler などの JobScheduling API を使用することで、バックグラウンドのプロセスやタスクについて高度なスケジュール設定ができます。これにより、プラットフォームがアイドル状態を適切に管理し、電池を節約できるようになります。
  • FrameMetrics API を使用して、レンダリング時間の遅延を特定する: FrameMetrics を使用して、本番環境デバイスのインタラクションごとのフレーム レンダリング時間を詳細に測定します。これにより、USB 経由で接続されたテストデバイスに依存することなく、本番環境デバイスに対してジャンクを引き起こしている特定のインタラクションやイベントを特定することができます。
  • 権限リクエストに関するおすすめの方法を参考にする: 権限をリクエストする前にユーザーにその理由を説明し、権限を許可することによってユーザーが直ちにメリットを得られるようにします。さらに、ユーザーが権限の拒否を取り消すことができるようにします。また、アプリが正しく機能するために適切な設定を行うよう、ユーザーに説明します。位置情報が必要な場合は、位置情報設定リクエストを作成して、該当するデバイス設定がオンになっていることを確認します。
  • リリース前レポートを利用する: 実際のデバイスでアプリをテストすることで、アップデートを公開する前に問題を特定し、修正できます。