写点什么

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

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

关注

评论

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

一文看懂开源工作流引擎 Flowable

八味阁

Java spring 开源 企业中台 工作流

《Linux就该这么学》笔记(二)

编程随想曲

Linux

抄作业

escray

学习 CSD 认证实战营

GrowingIO 微服务 SaaS 与私有部署运行实践

GrowingIO技术专栏

大数据 微服务 SaaS

KubeFATE:在Kubernetes上部署联邦学习平台

亨利笔记

人工智能 学习 FATE KUBEFATE

TOTO 2020再次荣获iF、红点两项国际设计大奖

极客编

CDN云课堂 |可编程CDN – EdgeScript应用场景、语言速览和实操演示

阿里云Edge Plus

概念有时候很坑

伯薇

抽象 思考力 沟通 概念

Kafka系列第6篇:消息是如何在服务端存储与读取的,你真的知道吗?

z小赵

Java 大数据 kafka 实时计算

奔向 10W+ 的第一次 update

赵新龙

InfoQ B站 Quora

多个 SSH keys 的配置,方便 Git 对不同仓库的使用与管理

与光

git GitHub SSH

想退休,可能没机会了

池建强

读书感悟

CDN百科 | 假如没有CDN,网络世界会变成什么样?

阿里云Edge Plus

用SpreadJS实现在线Excel的录入与展示,提升企业医保信息化服务水平

葡萄城技术团队

SpreadJS 医保信息化 在线excel

游戏夜读 | 如何优化缓冲加载?

game1night

用测试驱动开发学算法

escray

学习 CSD 认证实战营

如何推动与影响中型前端团队的成长

堂主

研发管理 大前端 团队建设

Java 编程基础

michaelliu

MySQL数据类型DECIMAL用法

Simon

MySQL

可视化 Tekton 组件 Tekton Dashboard

郭旭东

Kubernetes cicd

谈谈控制感(2):怎么让我们更健康

史方远

个人成长 心理

聊聊Serverless

kimmking

CDN云课堂 | EdgeRoutine技术专家教你把JS代码跑到CDN边缘

阿里云Edge Plus

Java CDN edge

并发编程如何才能不再头疼:iOS中的协程

超越杨超越

ios 协程 coobjc ucontext

读懂才会用 : 瞅瞅Redis的epoll模型

小眼睛聊技术

redis 缓存 学习 开源 架构 后端

由丰巢快递柜引发的思考

Neco.W

创业 思考 丰巢

一杯茶的时间,上手 Git 团队协作开发

图雀社区

git GitHub

CDN百科 | 最近,你的APP崩了吗?

阿里云Edge Plus

CDN

我站在愚蠢之巅

escray

学习 CSD 认证实战营

DD 测试linux性能

HU

视达荣登ChinaBang Awards 2020智慧零售榜Top10

极客编

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