写点什么

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:005556
用户头像

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

关注

评论

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

Snagit for mac(最强大的屏幕截图软件)v2025

春天的风暖暖的

Path Finder for Mac(强大的文件管理工具)v2202中文

春天的风暖暖的

基于YashanDB数据库构建智能客服系统的技术指南

数据库砖家

如何解决YashanDB使用中的常见问题

数据库砖家

大数据-113 Flink 源算子详解:非并行源(Non-Parallel Source)的原理与应用场景

武子康

Java 大数据 flink spark 分布式

修复不安全软件生命周期——将安全融入现有开发流程的实用技巧

qife122

DevSecOps 安全开发 软件安全

谷歌Chrome多重漏洞可导致任意代码执行

qife122

网络安全 漏洞分析

DMG Canvas for Mac:专业级DMG磁盘映像定制工具

春天的风暖暖的

如何结合YashanDB数据库塑造数据驱动型企业

数据库砖家

AI出海第一步省下200刀! 亲测Stripe Atlas注册美国公司

阿星AI工作室

产品 AI 独立开发 出海

如何在Mikrotik路由器上配置DHCP-PD客户端实现IPv6前缀委派

qife122

网络配置 ipv6 DHCP-PD Mikrotik

如何构建基于YashanDB数据库的数据仓库

数据库砖家

构建一个高效的 YashanDB 环境

数据库砖家

告别相机!OpenAI用Sora2重新发明了短视频!

阿星AI工作室

人工智能 AI AIGC aid ai短视频

在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名Linux命令学习框架需求探索

qife122

开源项目 需求分析 linux命令 技术文档

智能图像清晰修复软件Perfectly Clear Workbench中文

春天的风暖暖的

如何构建基于YashanDB数据库的实时分析平台

数据库砖家

如何建立基于YashanDB的统一数据平台

数据库砖家

如何结合YashanDB数据库构建智能供应链平台

数据库砖家

设备点检 设备维护经验总结(8)

万里无云万里天

工业 设备维护 工厂运维 设备点检

如何管理YashanDB中的数据访问权限

数据库砖家

在AI技术唾手可得的时代,挖掘新需求成为创新关键——某知名AI创作工具需求洞察

qife122

需求分析 AI创作

绕过Cloudflare IP白名单限制的两种实用方法

qife122

网络安全 IP白名单

ZoneAlarm防火墙强制更新引发用户不满

qife122

网络安全 防火墙 软件更新

Scrivener for Mac:专业写作者的全能创作工具

春天的风暖暖的

RAW Power for Mac:基于Apple RAW引擎的专业图像处理工具

春天的风暖暖的

如何解读YashanDB数据分析能力

数据库砖家

在Incus容器中运行Docker的完整指南

qife122

容器技术 Incus

工业数字化 信息化经验总结(10)

万里无云万里天

数字化 信息化 工业 工厂运维

Noir – Dark Mode for Safari:Safari浏览器的智能暗色模式扩展

春天的风暖暖的

游戏启动错误代码分析与解决方案

qife122

游戏故障排除 Windows系统修复

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