[关闭]
@Rays 2017-04-24T21:10:27.000000Z 字数 1431 阅读 2040

Facebook Litho:高性能安卓UI的构建框架

Facebook


摘要: Facebook开源了Litho。Litho是一种创建安卓应用用户图形界面的框架,使用了类似于React的声明式风格,考虑了界面的滚动性能。

作者: Abel Avram

正文:

Facebook开源了Litho。Litho是一种创建安卓应用用户图形界面的框架,使用了类似于React的声明式风格,考虑了界面的滚动性能。

使用Facebook Litho,开发人员可以调用声明式API创建不可变的UI组件。由于组件是不可变的,因此可以另开一个用于准备渲染和布局的线程,然后将组件传递给UI线程,实现在屏幕上的实际渲染。Litho使用了代码生成和针对渲染的组件优化,通过对组件分组降低了安卓ViewGroups的数量,使用更少视图层级生成更为平面化的界面。据Facebook宣称,这些做法降低了内存的使用,增加了界面的滚动速度。

Litho使用Yoga布局组件,该过程可以同步完成,也可以异步完成。Yoga是一个跨平台的布局引擎,它也是由Facebook开源发布的。考虑到组件是不可变的,而创建大量组件的代价很大,因此Litho允许一个组件被当前视图弃用后,可在其它视图中重用。

使用Litho定义一个“Hello, World!”文本组件的代码如下:

  1. public class MyActivity extends Activity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. final ComponentContext c = new ComponentContext(this);
  6. final LithoView lithoView = LithoView.create(
  7. this /* 上下文 */,
  8. Text.create(c)
  9. .text("Hello, World!")
  10. .textSizeDip(50)
  11. .build());
  12. setContentView(lithoView);
  13. }
  14. }

LithoView相当于安卓的ViewGroup,实现Litho定义组件与安卓View间的关联。Text是一个Litho提供的小部件,具有text、textColor、textSize、textStyle等一系列属性。

Litho API相当庞大,其中包含多个软件包,具有超过300个Java类和接口。Litho支持用户化布局、单元测试、事件处理、RTL(right-to-left)文本、可访问性等多种功能。

Litho已用于多个Facebook的安卓应用,例如Facebook、Facebook Lite、Messenger和Workplace等。Facebook声称在界面滚动功能上,Litho比安卓RecyclerView的性能提高了35%。这是通过“将繁重工作转移到后台线程,并将渲染工作分布在多个帧中”实现的。此外:

Litho将复杂视图分解为多个较小部分,例如文本、图像和视频等,然后增量地渲染各部分,并将需完成的工作分布到多个帧中。它还能在回收利用各个小部分,以无限可能的方式重组它们,这降低了在内存中需要创建并存储的视图个数。

该框架已发布在GitHub上。如需了解更多细节,可参考指南文档

查看英文原文: Facebook Litho: An Android UI Framework Created for Performance

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注