速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

软件业务模型

执于业务

业务模型设计方法和实例

执于业务

It is what it is

EchoZhou

English

大揭秘!时习知如何助力华为2024年中国政企合作伙伴商务精英赛?

平平无奇爱好科技

消息队列选型之 Kafka vs RabbitMQ

字节跳动云原生计算

kafka 消息列队

在Windows电脑上上传iOS应用至App Store

雪奈椰子

全面解析基线版本应用的探索实践

鲸品堂

测试 基线 运营商

【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)

阿里云数据库开源

数据库 阿里云 分布式数据库 PolarDB-X

PrismNET即将精彩亮相Token 2049 迪拜峰会,全面拓展国际影响力

PrismNET

比特币 dapp 区块链+ PrismNET棱镜协议 PrismNET

百度获评CCIA数据安全和个人信息保护社会责任评价“三星”示范单位

百度安全

数据安全 隐私合规

碳视野|新能源产业链看过来! 欧盟关键原材料法案生效!

AMT企源

数字化转型 新能源 双碳 碳管理

倒计时1天 | 袋鼠云春季发布会完整议程出炉!快快预约直播

袋鼠云数栈

AI 指标体系 大模型 指标建设

你应该知道的21个html小技巧

南城FE

html 前端 代码优化

学习 XSLT:XML文档转换的关键

小万哥

xml 程序人生 编程语言 软件工程 前端开发

深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性

GousterCloud

Linux Kenel 虚拟网卡

Linux网络名称空间之独立网络资源管理

GousterCloud

网络 Linux Kenel

嵌入式软件开发应该掌握哪些知识?

梦笔生花

嵌入式程序 嵌入式开发 嵌入式系统软件开发

Linux网络名称空间和Veth虚拟设备的关系

GousterCloud

ETL中Python组件的运用

RestCloud

Python ETL 数据集成

新一代营销费用管理,有效提升线下渠道投资回报率

赛博威科技

用 AI 让数据分析更智能 - Amazon Q 在 Amazon Quicksight 中的应用

亚马逊云科技 (Amazon Web Services)

数据分析 生成式人工智能

百度智能云向量数据库 VectorDB 性能报告

Baidu AICLOUD

向量数据库

【教程】App打包成IPA文件类型的四种方法

现成源码与定制开发:拍卖直播商城平台的最佳选择是谁?

软件开发-梦幻运营部

JSON 迎来的首个大客户竟是那种网站

胡译胡说

JavaScript json

Linux网络名称空间概述

GousterCloud

Linux Kenel

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