当前位置:新闻中心行业动态 → 正文

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

责任编辑:editor005 作者:Abel Avram |来源:企业网D1Net  2017-04-28 11:53:29 本文摘自:INFOQ

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

使用Facebook Litho,开发人员可以调用声明式API创建不可变的UI组件。由于组件是不可变的,因此可以另开一个用于准备渲染和布局的线程,然后将组件传递给UI线程,实现在屏幕上的实际渲染。Litho使用了代码生成和针对渲染的组件优化,通过对组件分组降低了安卓ViewGroups的数量,使用更少视图层级生成更为平面化的界面。据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 /* 上下文 */, Text.create(c) .text("Hello, World!") .textSizeDip(50) .build()); setContentView(lithoView); }}

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

关键字:组件InfoQ编程实例

本文摘自:INFOQ

x Facebook Litho:高性能安卓UI的构建框架 扫一扫
分享本文到朋友圈
当前位置:新闻中心行业动态 → 正文

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

责任编辑:editor005 作者:Abel Avram |来源:企业网D1Net  2017-04-28 11:53:29 本文摘自:INFOQ

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

使用Facebook Litho,开发人员可以调用声明式API创建不可变的UI组件。由于组件是不可变的,因此可以另开一个用于准备渲染和布局的线程,然后将组件传递给UI线程,实现在屏幕上的实际渲染。Litho使用了代码生成和针对渲染的组件优化,通过对组件分组降低了安卓ViewGroups的数量,使用更少视图层级生成更为平面化的界面。据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 /* 上下文 */, Text.create(c) .text("Hello, World!") .textSizeDip(50) .build()); setContentView(lithoView); }}

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

关键字:组件InfoQ编程实例

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^