写点什么

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

  • 2017-04-27
  • 本文字数:1049 字

    阅读完需:约 3 分钟

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

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

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

2017-04-27 19:005601
用户头像

发布了 227 篇内容, 共 86.4 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

.NET Fiddle:一个方便易用的在线.NET代码编辑工具

追逐时光者

C# .net .net core

一款为程序员和运维人员量身打造的一站式开发运维利器

追逐时光者

Docker SSH

如何通过YashanDB管理复杂数据模型

数据库砖家

如何通过YashanDB实施有效的数据治理

数据库砖家

智能制造 柔性制造经验总结(1)

万里无云万里天

工业 智能制造 工厂运维

一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!

追逐时光者

C# .net WPF

一款专门为 WPF 打造的开源 Office 风格用户界面控件库

追逐时光者

C# .net WPF

一套开源、美观、高性能的跨平台 .NET MAUI 控件库,助力轻松构建美观且功能丰富的应用程序!

追逐时光者

C# .net MAUI

工业管理 项目管理经验总结(17)

万里无云万里天

项目管理 工业 工厂运维

如何使用YashanDB提升业务智能分析能力如何使用YashanDB提升业务智能分析能力

数据库砖家

10 分钟使用 OrchardCore 快速构建 .NET 内容管理系统(CMS)

追逐时光者

C# .net

Zread:智谱AI推出的 Github 项目阅读神器,一键生成超详细中文文档!

追逐时光者

GitHub AI'

一个基于 .NET 开源、轻便的 Windows 优化工具,适用于 Win7 - Win11 最新版的优化!

追逐时光者

.net windows

精选 4 款基于 C# 开源、实用的工具类库,开发效率提升利器!

追逐时光者

C# .net .net core

如何使用YashanDB数据库提升业务决策效率

数据库砖家

推荐 4 款基于 .NET 开源、功能强大的文件管理工具,助力高效的整理文件与文件夹!

追逐时光者

C# .net

C#/.NET/.NET Core技术前沿周刊 | 第 56 期(2025年9.22-9.28)

追逐时光者

C# .net .net core

C#/.NET/.NET Core优秀项目和框架2025年9月简报

追逐时光者

C# .net .net core

一款基于 .NET 开源美观、功能丰富的串口调试工具

追逐时光者

.net WPF

如何提升YashanDB数据库的查询安全性

数据库砖家

漏洞赏金计划的困境:i915漏洞与ChromeOS、Intel赏金项目剖析

qife122

安全研究 漏洞赏金

精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!

追逐时光者

C# .net MAUI

找 Vue 后台管理系统模板看这个网站就够了!!!

追逐时光者

Vue

一个基于 .NET 开源、简易、轻量级的进销存管理系统

追逐时光者

C# .net .net core

Visual Studio 2026 预览体验版现已发布,一起来看看带来哪些新功能!

追逐时光者

.net Visual Studio

如何提升跨区域使用YashanDB数据库的效率

数据库砖家

如何通过YashanDB简化数据治理流程

数据库砖家

英国政府提供15亿英镑贷款援助捷豹路虎应对网络攻击危机

qife122

网络安全 政府援助

.NET 使用 CsvHelper 快速读取和写入 CSV 文件

追逐时光者

C# .net .net core

大数据环境下使用 YashanDB 进行实时分析

数据库砖家

精选 4 款基于 .NET 开源、功能强大的 Windows 系统优化工具

追逐时光者

.net windows

Facebook Litho:高性能安卓UI的构建框架_Java_Abel Avram_InfoQ精选文章