写点什么

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

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

关注

评论

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

模块一

GeekMLS

构架

事务相关知识集锦

京东科技开发者

MySQL 数据库 spring mybatis 事务

我服了!腾讯专家手敲《Redis源码日志笔记》,字字如金

钟奕礼

Java 程序员 java面试 java编程

各开发语言DNS缓存配置建议

京东科技开发者

#DNS

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

架构训练营模块1作业

gigifrog

架构训练营

架构实战营模块一作业

😊😊😊

作业一

web技术分享| 图片上传与图片裁剪结合 vue3

anyRTC开发者

Vue 前端 Web 图片上传 图片裁剪

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

秒云成功入选《2022爱分析 · 信创厂商全景报告》

MIAOYUN

信创 信创云 金融信创 信创产业

2022阿里云研发效能峰会,来啦!

阿里云云效

DevOps 研发效能 开发 数字化转型

手写vue-router核心原理

hellocoder2029

JavaScript

彻底搞懂JS原型与原型链

hellocoder2029

JavaScript

前端精准测试实践

京东科技开发者

前端 测试 精准测试 webhook 精准分析

Redis数据持久化机制(备份恢复)、缓存淘汰策略、主从同步原理、常见规范与优化详解

C++后台开发

数据库 redis 中间件 后端开发 C++开发

华为云发布CodeArts Req需求管理工具 让需求管理化繁为简

Geek_2d6073

PostgreSQL 技术内幕(三)聚集算子

酷克数据HashData

postgresql

文盘Rust -- r2d2 实现redis连接池

京东科技开发者

redis 后端 封装 连接池 rust语言

不知如何优选达人?火山引擎VeDI零售行业解决方案一键解决!

字节跳动数据平台

大数据 数据分析 营销 12 月 PK 榜

细说JavaScript闭包

hellocoder2029

JavaScript

架构训练营模块一作业

Dinfan

架构实战营

与Web3支付赛道主要项目相比,Zebec生态潜力相当大

股市老人

【PCB技能】脑瓜疼的PCB反复评审难题,解决方法在这!

华秋PCB

工具 PCB PCB设计

迁移回归问题新突破,火山语音团队论文被人工智能顶级期刊IEEE TPAMI接收

科技热闻

前端leetcde算法面试套路之树

js2030code

JavaScript LeetCode

如何通过C#合并Word文档

在下毛毛雨

C# .net word文档 文件合并

阿里技术官珍藏JVM全优笔记,细节满分,吃透写精通没问题

钟奕礼

Java 程序员 java面试 java编程

Java语言标识符的命名规范(超详细讲解)

千锋IT教育

惊喜!Alibaba架构师手写《Java一无所知到精通》文档

钟奕礼

Java 程序员 java面试 java编程

面试阿里P6,却被MySQL难倒,二战阿里,挤进天猫团队(Java岗)

钟奕礼

Java 程序员 java面试 java编程

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