関西モバイルアプリ研究会 #14 Android 発表枠のライトニングトークで使用したスライドです ⬇︎
http://kanmoba.connpass.com/event/31750/
「Android ViewGroup ネスト」で検索すると @konifar さん著の為になる記事がありました ⬇︎
http://qiita.com/konifar/items/3c75f1fab0e0a10ebb14
動画は https://vimeo.com/168086902 にアップロードしました。
⬇︎⬇︎ 以下、テンパって見ることができなかった Keynote の発表者ノート ⬇︎⬇︎
発表内容は
・ViewGroup を入れ子にし過ぎるのは良くない
・アプリを高速化する方法
について
です。
ViewGroup とはレイアウトの外枠みたいなもの。
その中に TextView や ImageView などのウィジェットを入れて配置していく。
ViewGroup の
種類は LinearLayout や RelativeLayout など。
注意点は ViewGroup をネストさせるとアプリの動きが重くなること。
今回の発表のために ViewGroup ネストでアプリが重くなることが一目で分かる動画を作ってみました。
手順は ViewGroup 1階層と100階層の ListView を準備して
adb の input touchscreen swipe コマンドで両方のリストを同じ力でスクロールしたものを
adb の screenrecord で録画するという方式です。
【11ページを見ながら説明】
左がスイスイ動く、右は動きがガタガタしています。
動画で違いが分かりにくいという方は
実際に端末でやってみると重さを実感できます。
若干脱線しますが動画を作ってみて得た知見。
Android 4系では ViewGroup を20階層ぐらいネストするとエラーで落ちますが、5系では100階層ネストしても落ちないということが分かりました。
最新バージョンはやはりスペックが高い。
続いて 、無駄に ViewGroup を入れ子にしているところを減らしてアプリのパフォーマンスをUPする方法について。
① PercentRelativeLayout
PercentRelativeLayout の特徴は配置するウィジェットのサイズを「
ディスプレイ全体の縦横何パーセント」で決めることができるところです。
レイアウトを作るときは先ずコレを使うこと考えた方が得策だと思います。
PercentRelativeLayout を使わなかった場合、
ViewGroup を結構多めに使う羽目になるというのが経験上&体感的にあります
。
PercentRelativeLayout を使うと少なめの ViewGroup で結構凝ったレイアウトが作れたりします。
② merge タグ
ViewGroup のカスタムビューを作るときに xml のルートを merge タグにしましょう。
なぜなら extends している ViewGroup のクラスがルート部分を担っているので merge タグで省略できます。
【19ページを見ながら説明】
PercentRelativeLayout を extends しているカスタムビューです。
【20ページを見ながら説明】
この xml のルート部分に merge タグを使っているので無駄に1階層増えずに済んでいます
(ここの merge タグを ViewGroup にした場合は無駄に ViewGroup が生成されてしまうことになる)
◆ まとめ ◆
・ViewGroup のネストを減らすとアプリがスイスイ動くようになる
・ソースコードが結構見易くなる
・PercentRelativeLayout と merge タグを使って ViewGroup のネストを減らしましょう