写点什么

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

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

关注

评论

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

翻译积累 - Java正则表达式Pattern类

小马哥

翻译 日更

谈 C++17 里的 State 模式之二

hedzr

c++ 算法 设计模式 Design Patterns 有限状态机

软件架构之原则、风格和实践

俞凡

架构

linux手误rm可能不需要跑路

入门小站

Linux

【云原生】:一文读懂Docker核心技术

息之

Docker 云原生

【Flutter 专题】138 图解自定义国旗渐变头像

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

003云原生之架构原则

穿过生命散发芬芳

云原生 10月月更

在线心语日历批量生成工具

入门小站

工具

🏆【Spring技术专题】「动态代理技术」Spring框架中Aspectj和LoadTimeWeaving的动态代理技术实现指南

码界西柚

spring aop 动态代理 LTW 10月月更

Minerva -- Airbnb的大规模数据指标系统 Part 3

俞凡

架构 Airbnb 大厂实践 指标 10月月更

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

AI 引航计划

2. Python函数式编程中的字符串,元组,函数的分类,高阶函数,一篇文章都介绍一遍

梦想橡皮擦

10月月更

如何应对员工犯错?

石云升

项目管理 管理 引航计划 内容合集 10月月更

细说包管理器yarn和npm

devpoint

npm YARN Node 10月月更

微博系统中”微博评论“的高性能高可用计算架构

michael

#架构实战营

1. 滚雪球学Python第四季开启,一需三吃,Python 函数式编程初识,面向过程,面向对象,函数式

梦想橡皮擦

10月月更

以匠心正道,以决心致远:毫末智行的自动驾驶之路

脑极体

【LeetCode】 旅行终点站Java题解

Albert

算法 LeetCode 10月月更

javaweb springboot汽车租赁系统源码

清风

源码 springboot 计算机毕业设计

老式月饼是一块坚硬的乡愁

石君

自我成长 乡愁

上次写作还是在上次之——WebRTC(一)

Zoomdaa

WebRTC

第 9 章 -《Linux 一学就会》-文件的归档和压缩 tar---zip

学神来啦

Linux 运维 linux学习

springboot vue失物招领网站源码

清风

源码 Vue springboot java 计算机毕业设计

SpringMVC源码分析-HandlerAdapter(4)-ModelAndViewContain组件分析

Brave

源码 springmvc 10月月更

Object.defineProperty的缺点及Vue3为什么用Proxy

wudaxue

独一无二的「MySQL调优金字塔」相信也许你拥有了它,你就很可能拥有了全世界。

码界西柚

性能优化 后端 MySQL 数据库 引航计划 10月月更

《写给互联网工程师的5G书》全文pdf开放下载

俞凡

架构 5G 网络 通信 10月月更

容器 & 服务:Helm Charts(一)

程序员架构进阶

架构 Kubernetes 容器 Helm Charts 10月月更

聊一聊差分放大器

不脱发的程序猿

嵌入式 电路设计 硬件开发 运算放大器

数据结构与算法 - 复杂度

小马哥

数据结构与算法 日更

自动驾驶混战,剑气二宗谁能笑傲江湖?

白洞计划

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