写点什么

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

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

关注

评论

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

写在再次学习python之前-why篇

赵开忠

Python 28天写作

区块链的前世今生(1)

抗哥

kill -9 导致 kafka 重启失败的惨痛经历!

AI乔治

Java kafka 架构

记一次JVM OOM 实战优化

AI乔治

Java 架构 JVM OOM

生产环境全链路压测建设历程 24:FAQ 5、6负载均衡、如何不影响正常业务?

数列科技杨德华

28天写作

28天瞎写的第二百一二天:一次删库没跑路的故事

树上

28天写作 删库

架构师第 3 课作业及学习总结

小诗

「架构师训练营第 1 期」

腾讯T3面试官透露!360°深入了解Flutter,聪明人已经收藏了!

欢喜学安卓

android 程序员 面试 移动开发

MySQL中的哥哥表、妹妹字段,是什么鬼?

Java MySQL 数据库

网络工程师职业指南

【薪火计划】08 - 非暴力沟通

码字与律动

管理 28天写作

谬误词典:置信度

lidaobing

随机漫步的傻瓜 28天写作 谬误词典

jstat使用实用教程

JavaPub

Java JVM

架构师训练营第 1 期 - 第 12 周 - 命题作业

wgl

架构师训练营第 1 期

技术人小故事-团队愿景篇-第1段

Ian哥

28天写作

手把手教你如何巧用Github的Action功能

flutter android 持续集成

意识会在哪个早晨降落——「幻想短篇1/28」

道伟

28天写作

LeetCode题解:17. 电话号码的字母组合,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

CSS10 - 盒子模型&常用无序列表样式

Mr.Cactus

html/css

SafePoint 与 Stop The World 全解(基于OpenJDK 11版本)

AI乔治

Java 架构 jdk JVM

牛啤了!阿里技术官整理的这份《Java面试手册5000题》已经成功让数百名社招生“圆梦BATJ”

Java 编程 面试

架构师训练营第 1 期 - 第 12 周 - 学习总结

wgl

「架构师训练营第 1 期」

【Node.js】静态页面和简单的路由

德育处主任

大前端 Node 28天写作

架构师训练营 1 期 - 第 十四周总结(vaik)

行之

「架构师训练营第 1 期」

架构师第 4 课作业及学习总结

小诗

「架构师训练营第 1 期」

资深大牛带你了解源码!阿里内部Android笔记火爆IT圈,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

职业成长就是一个逐渐“变帅”的过程

L3C老司机

芯片破壁者(二十四):1987战役启示录

脑极体

SpringBoot系列1——概述和快速入门

程序员的时光

springboot 七日更 28天写作

【计算机内功修炼】三:一文彻底理解IO多路复用

码农的荒岛求生

epoll

缓存穿透,缓存击穿,缓存雪崩

en

redis 缓存穿透 缓存击穿 缓存并发

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