写点什么

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

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

关注

评论

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

互联网大厂Java面试高手心法,在寒潮之下找到自己心仪的 offer。

码哥字节

Java 后端面试

新闻“样板间”提升50%开发效率,20家新闻媒体应用批量鸿蒙化

最新动态

关于粒子滤波的解析

芯动大师

粒子滤波

mac苹果电脑矢量绘图软件:Sketch for mac 中文激活版

你的猪会飞吗

sketch Mac Mac软件下载站 mac破解软件下载

Go必知必会:掌握Go语言中的Channel,并发编程的核心

王中阳Go

并发 channel Go 语言 GO语言编程

NGINX 和 HAProxy:基于公有云标准环境的用户体验测试对比

NGINX开源社区

读书笔记 开源 最佳实践 反向代理 HAProxy

替换传统数据处理平台,TDengine 与华风数据达成合作

TDengine

数据库 tdengine 时序数据库

GreatSQL 异步复制及搭建

GreatSQL

StarRocks 培训课程重磅上线!专家出品,助你升级打怪不走弯路!

StarRocks

数据飞轮转进快递行业 能够为企业带来哪些新想象

字节跳动数据平台

数字化转型 云服务 数据平台 火山引擎 数据飞轮

洞悉市场脉搏,从实时监控商品信息开始 —— 淘宝API的力量

技术冰糖葫芦

API Explorer平台 api 网关 API Gateway API 测试 pinduoduo API

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

阿里云天池

云原生

现在的 AI ,有多会做老师?

Trae

Python 人工智能 程序员 AI 求职

对游戏语音软件Oopz遭遇DDoS攻击后的一些建议

网络安全服务

负载均衡 udp 语音聊天软件 DDoS 攻击 黑神话悟空

鸿蒙NEXT生态应用核心技术理念:一次开发,多端部署

芯盾时代

鸿蒙 物联网 国产化替代

化“腐朽”为“神奇”:5 种 RAG 优化技术应对千奇百怪的 Query

Baihai IDP

程序员 AI rag Baihai IDP 企业 9 月 PK 榜

防城港等保测评机构有哪些?在哪里?

行云管家

等保 等级保护 防城港

火山引擎携手招商银行共探智能体应用,加速数字金融创新

新消费日报

支撑AI的算力芯片,未来何去何从?

博文视点Broadview

GitHub Star 数量前 13 的自托管项目清单

NocoBase

GitHub 开源 自托管 self-hosted

华为视频独家呈现:发布会开场舞《见非凡》AiMax 版来袭

最新动态

读书笔记:简单高效的工作方式

老张

读书笔记 团队管理 远程办公

如何高效的匹配、筛选数据,避免嵌套循环

六哥是全栈

Java ts 开发技巧

对接开源大模型应用开发平台最佳实践

阿里云大数据AI技术

人工智能 LLM rag OpenSearch dify

健康产业怎么定义?需要用到堡垒机吗?

行云管家

网络安全 数据安全 堡垒机 健康产业

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