Androidアプリをもっと速くする

Droidcon紹介

Droidconはコミュニティ主導のAndroid開発者カンファレンスです。Androidコア、組み込み、拡張現実、ゲーム、ビジネスなど、Androidエコシステムの各領域の専門家たちが流行をリードする発表をするイベントです。8月27〜28日、米ニューヨークでDroidcon NYCが開かれました。

そこでUdi Cohen氏が発表した“Speed up your app”はアプリの高速化に関する講演のスライドと要約です。

CPU処理最適化

Systrace

Systraceは、Androidカーネルから収集したシステムや実行中のアプリケーションデータをもとに、CPU、スレッドなどに対するレポートを作成します。ディスプレイ性能を測定したり、性能上のボトルネックが発生する箇所を発見することに利用されます。Systraceを実行するための条件は下記になります。

記事の更新情報を受け取る

  • SDKバージョン20以上
  • Python実行環境および環境変数設定
  • Androidバージョン4.1以上のデバイス(開発者オプションでUSBデバッグの許容)
  • アプリケーションコード

まずAndroid Studioでアプリをビルドして、コンピュータと接続しているデバイスでアプリが実行中でなければなりません。Tools-Android-Android Device Monitor(ADM)を選択した後、DDMSを実行します。対象のアプリを設定してSystraceボタンを押します。結果ファイル、追跡時間など設定関連ウィンドウが表示されたら、必要な値を入力した後、OKボタンを押して実行します。追跡が終わると、事前に設定したパスにhtmlファイルで結果を保存した後、自動的に追跡を終了します。より詳細な説明はAndroid Developerで見ることが出来ます。

Traceview

DDMBSでプロファイルメソッドを実行するボタンを押して、アプリケーションを動かしたのち、停止ボタンを押します。アプリケーションで実行された処理で使用されたクラス、メソッドごとにCPU使用量を見ることができます。

メモリ最適化

Android開発において、ビットマップ処理関連でよく遭遇する不具合はOut Of Memoryだと思います。明示的にメモリを解放しなくてもGarbage Collectorが使用しないメモリを整理してくれますが、大量の画像を処理するなどの場合はメモリ管理が必要です。このため、まずメモリをどのように確認するのか見てみましょう。

メモリ使用量確認

Android Studio下段のAndroid - Memoryタブで、現在実行中のアプリケーションのメモリ使用量を確認することができます。

赤い色で示した箇所でGarbage Collectorによりメモリが回収されたことを知ることができます。

メモリスナップショット分析

Monitor MemoryでDump Java Heap iconをクリックして現時点のHeapのスナップショットを生成します。スナップショットファイルは“Snapshot-<yyyy.mm.dd-hh.mm.ss>.hprof”名でCapturesタブに保存されています。スナップショットファイルをダブルクリックすると、下記のようにメモリ状態を確認することができます。オブジェクト間の参照関係、各オブジェクトが占めるメモリ量などが確認できます。

メモリ割り当ての変化を確認する

特定のアクションを取った時のメモリ割り当ての変化を観察するためにAllocation Trackerを使用します。Start Allocation Trackingを押してメモリ割り当てモニタリングを開始します。アプリケーション内で特定のアクションを実行し、モニタリングを始めたときに押したアイコンと同一のアイコンを押してモニタリングを中止します。CapturesタブのAllocation Trackingフォルダにファイルが生成されてダブルクリックするとメモリ割り当て結果を確認することができます。メソッドやクラスごとにメモリ割り当ての変化を確認することができます。

Eclipse MATで分析する

EclipseでもMemory Analyzerを使用してAndroid Studioで行ったメモリ分析が可能です。

UI処理最適化

Hierarchy View - 階層構造および性能調査

ADMでhierarchyviewを実行します。画面を構成するビューの階層構造をTree Viewで確認することができますが、Tree Viewでビューを選択すると、これについての情報を真上に下記のように表示します。3つの丸はそれぞれmeasure、layout、drawの性能を表し、緑色は上位50%、黄色は下位50%、赤い色は最下位グループに属したことを示します。ViewGroupは仕方なく子ビューたちによって相対的に低い性能を見せるが、これを考慮してもあまりにも低い性能を示したら、不要な階層構造を使用していないか調査しなければなりません。

lint - リソースファイル静的コード分析

lintは設定した範囲に対して、リソースファイルのソースコードを分析します。浪費されているリソース資源がないのか今後問題が発生することがあるコードが存在するかどうかを確認します。Analyze-Inspect Codeを選択して検査ファイルの範囲を設定すると検査が行われます。

補足

さらに詳しい内容はビデオまたは彼のブログ記事で確認することができます。

About the content

This content has been published here with the express permission of the author.


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close