バッテリー消費のためのAndroidアプリのプロファイリング





遅かれ早かれ、すべてのAndroidユーザーは、電話が画面から外れていても、どのアプリケーションが一晩でバッテリー全体を消費したかを理解する必要があると思います。 見つかった犯人の運命はうらやましいことではありません。ほとんどの場合、単純に削除されます。 それでは、アプリケーションがバッテリーを最小限に使用するために何ができるでしょうか? この記事では、この質問に答えて、使用したバッテリー消費を削減する方法について説明します。







定量化



まず、コードの修正後の進行状況を監視するために、バッテリー消費を測定する方法について同意しましょう。 私たちが利用できるのは、バッテリー電力の割合だけです。 私たちはそれに集中します。 この値は、非常に多くの要因によって異なります。



測定誤差を減らすために、次のことをお勧めします。



バッテリーは何をしますか?



バッテリーの主な消費者は次のとおりです。



このリストは多くのAndroid開発者に馴染みがあると思います。 最も興味深いのは、これらの各ポイントの貢献です。 もちろん、異なる場合があります。 そして、これが私の観察です。



アプリケーションによるバッテリー消費を削減するために、何に影響を与えることができますか? それほど多くはありません。





バッテリー消費プロファイリング



以下が必要です。



各実験は、次の手順で構成されています。

  1. バッテリーを完全に充電してください。 バッテリースケールの同じ部分で、後で実験結果を互いに比較できることが重要です。
  2. テスト対象のアプリケーションをデバイスにインストールします。
  3. デバイスを再起動します。 これは必要です そうしないと、バックグラウンドで実行されている他のアプリケーションが結果に影響を与える可能性があります。
  4. バッテリー統計のリセット:adb shell dumpsys batterystats --reset
  5. ウェイクロックの統計を有効にすることもできます。 デフォルトでは無効になっています:adb shell dumpsys batterystats --enable full-wake-history
  6. 充電しないように、コンピューターからデバイスを取り外すことを忘れないでください。
  7. 次に、テスト済みのアプリケーションを実行します。
  8. そして、デバイスを数時間延期し、少なくとも10-15%放電させます。 テスト中は、結果に影響する可能性があるため、デバイスに触れず、画面をオンにしないことをお勧めします。
  9. テスト中にデータを調査します。


最後のステップで詳細に説明します。 テストデータを調べるには2つの方法があります。 Googleが開発したプロファイラーを使用できます。 そして、Androidの設定でUIを使用できます。



1.バッテリー履歴プロファイラー

まず、プロファイラーはAndroid 5.xと以前のバージョンのOSで異なるUIを表示します。 さらに、データの量、完全性、表示の容易さは、Android 5の方が大きく異なります。一方、異なるバージョンのAndroidで実行した場合、バッテリーでアプリケーションをプロファイリングした結果は著しく異なります。 Android 5でプロファイリングを開始することをお勧めします。その後、OSの以前のバージョンでこのプロセスを必ず繰り返してください。



2. Android設定のUI

ここではすべてが簡単です。 電話で、[設定]-> [バッテリー]に移動します。 パーセンテージとは、各アプリケーションで使用されるバッテリーの割合を意味します。 100%の場合、テスト中に費やされたすべてが取得されます。







たとえば、上の画面は、午後10時頃から午前7時30分頃までに統計が収集されたことを示しています。 この間、デバイスは72%(100%-28%)放電されます。 排出されたものの14%(つまり、72%から)がスクリーンに送られました。 MAPS.MEで12%。 このリストのアイテムをクリックすると、選択したアプリケーションの費用に関する詳細情報を取得できます。 この画面は、消費量が6時間から7時間に急激に増加したことも示しています。 多くの場合、アプリケーションがGoogle Appsを積極的に使用し、料金が請求されます。 これは上記のスクリーンショットでも見られます。 このダイアログを使用すると、システムで起動された他のアプリケーションやサービスのバックグラウンドに対して、アプリケーションで何が起こっているのかをすばやく理解できます。 また、Android 4.x以前の場合、プロファイラーを使用して取得できないデータを提供します。



バッテリー履歴プロファイラーの使用



最初に、プロファイラーをインストールする必要があります。 インストールプロセスの詳細については、 こちらをご覧ください 。 以下が含まれます。



次に、デバイスを接続し、最後の充電データリセット以降のバッテリー消費に関する情報を収集します(バッテリーが完全に充電された場合、またはコマンドが呼び出された場合に発生します:adb shell dumpsys batterystats --reset):



adb bugreport > bugreport.txt
      
      





プロファイラーを実行します。



 cd $GOPATH/src/github.com/google/battery-historian go run cmd/battery-historian/battery-historian.go
      
      





次のブラウザにアクセスします。

http:// localhost:9999



開いたウィンドウで、以前に保存したbugreport.txtファイルを選択します。



ブラウザに表示される結果は、bugreport.txtがダウンロードされたAndroidのバージョンによって異なります。 Android 5.xの場合、システム内の各アプリケーションの統計情報など、一連のタブとさまざまな情報を含むページが表示されます。 デバイスのバッテリー消費に関する一般的な統計:











アプリケーション統計:







Android 4.xでは、このようなダイアログが表示されます。 情報量は大幅に少なくなりますが、一般的な消費で何が起こっているかを理解できます。







アプリケーションプロファイリングモード



少なくとも2つのモードでチェックすることは理にかなっています。



理由がない限り、バックグラウンドのアプリケーションはリソースをまったく消費しないことが望ましいです。 さらに、運転中にアプリケーションがどのようにバッテリーを消費するかを個別に確認する価値があります。 特に、GPSを使用している場合、または他の方法で場所に接続されている場合。



バッテリー劣化



時間が経つにつれて、バッテリーの充電が弱くなることを考慮することが重要です。 私は、アプリケーションが半年の間、1.5倍速くバッテリーを放電し始めた場合がありました。 その理由は、バッテリーの劣化です。 これはテスト時に考慮する必要があります。 アプリケーションが6か月前の4時間の作業でデバイスのバッテリー全体を食べていた場合、ほとんどの場合、より短時間でバッテリーを消費します。 そして、その理由は、アプリケーションで何かが間違っているからではありません。



競合他社との比較



上記の方法では、アプリケーションのソースコードにアクセスする必要がないことに注意してください。 これは、競合他社と比較して、アプリケーションがバッテリーを消費する方法を比較できることを意味します。



おわりに



この記事では、Mail.Ru GroupでMAPS.MEを操作するときに取るバッテリー消費を削減する方法について説明しました。 誰かが同じ問題を解決するために他の手段や技術を使用していると聞いたら興味深いでしょう。 コメントを書いてください。



All Articles