Infinito Nirone 7

白羽の矢を刺すスタイル

AsyncLayoutInflater vs Litho

先月の shibuya.apk で Litho の発表があり、非同期でレイアウトの展開(draw 以外の部分)をやってくれる機能をもっているということで、AsyncLayoutInflater と Litho で勝負したらどっちが速いかを確かめたくなったので、結果を書いておこうと思います。

内容

10000個の TextView をもつレイアウトを表示するまでの時間を競います。

結果

データを取るまでもないほどに Litho が遅くて勝負になりませんでしたorz

いや、きっとまだ 0.3.x と正式リリース前なのと、自分自身が API を完全には理解しきれていないせいだと思いたい😞

リポジトリ

とりあえずそれっぽくつくったものは GitHub に公開しています。Litho の状況からして今後改善の余地は大いにあるはずですので、ゆっくりと見守りたいと思います。

github.com

AsyncLayoutInflater について

サポートライブラリに入っている、名前の通りレイアウトを非同期に inflate するクラスです。コールバックでレイアウトまで完了した view が得られるので、あとはそれを親の ViewGroup に追加することで描画できます。内部は至極簡単な作りで、一つのスレッドが無限に inflate の要求を待っていて、要求が来るとそれをレイアウトまで計算してコールバックに渡す、というものです。