BT

Facebook Litho: パフォーマンス向上のためのAndroid UI フレームワーク

| 作者: Abel Avram フォローする 8 人のフォロワー , 翻訳者 大田 緑 - (株)チェンジビジョン フォローする 1 人のフォロワー 投稿日 2017年5月1日. 推定読書時間: 3 分 |

原文(投稿日:2017/04/19)へのリンク

FacebookがLithoをオープンソース化した。Lithoは、Androidアプリケーションのユーザインタフェースを作成するためのフレームワークで、スクロールのパフォーマンスを考慮して、Reactのような宣言型スタイルを使う。

Facebook Lithoでは、宣言型APIを使って、変更できないUIコンポーネントを作成できる。コンポーネントは変更できないので、別々のスレッドでレンダリングとレイアウトを準備し、画面上の実レンダリングにUIスレッドを渡すことができる。Lithoは、コード生成を使い、レンダリングするコンポーネントを最適化する。また、コンポーネントをグループ化して、より小さなビュー階層でフラットなインタフェースを生成することにより、Android ViewGroupの数を減らす。Facebookによると、これによりメモリ消費を減らし、スクロール速度が増加するはずだ。

Lithoは、コンポーネントをレイアウトするためにYogaを使う。このプロセスは、同期、または、非同期で実行できる。Yogaは、Facebookによってオープンソース化された、クロスプラットフォームレイアウトエンジンだ。コンポーネントは変更できず、多数のコンポーネントを作成するとコストがかかるため、Lithoでは、現在のビューからコンポーネントが破棄されたら、別のビューでそれを再利用できる。

Lithoでは、"Hello, World!"テキストコンポーネントを以下のように定義する。

public class MyActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

final ComponentContext c = new ComponentContext(this);

final LithoView lithoView = LithoView.create(
	this /* context */,
	Text.create(c)
.text("Hello, World!")
.textSizeDip(50)
.build());
	
setContentView(lithoView);
}
}

LithoViewは、LithoとAndroidのViewで定義されたコンポーネントを接続する、AndroidのViewGroupに対応する。Textは、Lithoのウジェットで、text、textColor、textSize、 textStyle等の様々なプロパティを持つ。

Litho APIは、非常に大きく、300以上のJavaのクラスとインタフェースと共に、2、30ものパッケージを含む。カスタムレイアウト、ユニットテスト、イベントハンドリング、RTL(右から左への)テキスト、アクセシビリティ、その他を、Lithoはサポートする。

Facebookは、Facebook、Facebook Lite、Messenger、Workplace等のAndroidアプリケーションでLithoを動かしている。表面をスクロールするのに、AndroidのRecyclerViewよりもLithoは速いと、Facebookは主張する。Facebookのアプリケーションは、35%、速度が改善した。これは、「重い作業をバックグラウンドのスレッドで処理し、複数のフレームにレンダリング作業を分散させる」ことによって、実現している。また、

Lithoは、複雑なビューを、テキスト、画像、ビデオ等に小さく分割します。複数のフレームにすべき作業を分割して、それらを徐々にレンダリングします。これらの小さな断片はリサイクルもできて、事実上、無限の方法で再び結合し、作成して、メモリに保存する必要があるビューの合計数を減らします。

このフレームワークはGitHubで利用できる。もっと詳細を知りたい人は、チュートリアルドキュメントを参照しよう。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT