2012/01/14

HierarchyViewerでパフォーマンスを向上する手がかりを得る


アプリケーションのUI構築速度は非常に重要です。
Viewのレンダリングに時間がかかり、UI構築に手間取ることはレスポンスタイ
ムの遅れに繋がります。

AndroidのSDKにはHieralchyViewerというツールが同梱されています。
このツールを使用することで、レンダリングに時間をかけているViewを特定し
アプリのパフォーマンス向上に役立てることができます。
HieralchyViewerの使い方は他サイト様でも扱われている内容なので割愛します。

HieralchyViewerでは下図のような結果が得られます。


Viewアイテム内に表示される三色の丸型アイコンには下記の意味があります。

 左:
  Measure値です。Measure値はViewのサイズ決定にかかる時間です。

 中央:
  Layout値です。Layout値はViewの配置にかかる時間です。

 右:
  Draw値です。Draw値はViewの描画にかかる時間です。


それぞれの丸型アイコンの色については下記の意味合いを持ちます。
ここでの「同階層」とは上図の赤枠で囲まれた範囲を指します。

 緑:
  解析されたViewツリー内の同階層にある全てのViewオブジェクトの中で、
  対象のViewに対するレンダリング所要時間が50%未満である。
  このViewは、同階層にある全てのViewオブジェクトよりレンダリング速度が
  50%以上高速であることになります。

 黄:
  解析されたViewツリー内の同階層にある全てのViewオブジェクトの中で、
  対象のViewに対するレンダリング所要時間が50%以上である。
  このViewは、同階層にある全てのViewオブジェクトよりレンダリング速度が
  50%以上低速であることになります。

 赤:
  解析されたViewツリー内の同階層にある全てのViewオブジェクトの中で、
  対象のViewに対するレンダリング所要時間が最遅である。
  このViewは、同階層にある全てのViewオブジェクトの中でレンダリング速度
  が最も遅いことになります。

HieralchyViewerで問題点が見つかったら改善するかの判断をします。
改善にあたっては、アプリのレイアウトとレイアウト階層の最適化をサポート
してくれるツール layoutopt が役に立ちます。

参考:HieralchyViewer
http://developer.android.com/guide/developing/debugging/debugging-ui.html

参考:layoutopt
http://www.techdoctranslator.com/android/developing/tools/layoutopt

【備考】
Viewの表示設定としてvisible, invisibleとgoneがあります。
invisibleとgoneの違いは、不可視なViewが自身の描画領域を持っているかどうかです。
どちらも描画されないため、先述のdrawは実行されません。
invisibleは描画領域を持つのでmeasureとlayoutが実行されます。
goneは描画領域を持たないのでいずれも実行されません。
つまりは、invisibleよりgoneの方がレンダリングにかかる時間がより短くなります。

以上です。