写点什么

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

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

关注

评论

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

“易+”开源 | 基于 ijkplayer 的 LLS-Player 移动端应用实践

网易云信

开源 实时音视频 低延时直播

直播回顾 | 点击率提升400%,Ta是怎么做到的?

HarmonyOS SDK

HMS Core

澜舟科技周明:进入AI 2.0不代表一定要抛弃1.0的技术

澜舟孟子开源社区

AIGC 澜舟科技 ChatGPT

设计原则 — I 接口隔离原则

Lemoon Can

接口隔离原则 设计原则

无线WiFi信号强度统计:WiFi Signal Strength Explorer 激活版

真大的脸盆

Mac wifi Mac 软件 无线管理 WiFi统计

超越 ChatGPT,GPT-4 将成为下一个“顶流”?

Zilliz

ChatGPT

共铸国云智领未来| “云游”华夏?山西美景正当时!

天翼云开发者社区

常见的项目管理问题如何应对?| 得物技术

得物技术

云行| 三大重磅发布,助力重庆数字经济新发展!

天翼云开发者社区

欢迎大家来到不可思议又有趣的SQL世界

图灵教育

sql 数据库、 SQL sever

智能、高效、便捷问题定位利器 —— 应用诊断分析平台 ATP 上线

OpenAnolis小助手

内存泄露 龙蜥社区 应用诊断 ATP 异常行为

最新版本 Stable Diffusion 开源 AI 绘画工具之汉化篇

极客飞兔

本地化 汉化教程 AI绘画 Stable Diffusion Chinese

共铸国云繁荣生态!天翼云华东中心生态合作大会圆满举行

天翼云开发者社区

智慧公厕系统:提高管理效率与用户体验的创新解决方案

光明源智慧厕所

智慧城市 智慧物业 智慧屏 智慧机场

如何轻松应对偶发异常

阿里巴巴云原生

阿里云 微服务 云原生

风云变幻,尽收眼底!天翼云为气象信息化发展注智赋能

天翼云开发者社区

前端培训怎么学习好?

小谷哥

私有化部署chatGPT,告别网络困扰

南城FE

人工智能 前端 ChatGPT

五分钟!获得轻量级的云原生应用控制平面

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

腾讯云数据库性能打破世界纪录 每分钟可处理8.14亿笔交易

数据库小组

数据库 腾讯云 tdsql

【4月1日 上海站】融云社交泛娱乐出海赋能会,干货、礼品在等你!

融云 RongCloud

互联网 融云 泛娱乐 出海 通讯

“易+”开源 | 基于 ijkplayer 的 LLS-Player 移动端应用实践

网易智企

开源 实时音视频 低延时直播

小白线下学习前端培训怎么样

小谷哥

HPC调度基础:slurm集群的部署

天翼云开发者社区

AF_XDP技术简介

天翼云开发者社区

从制作九转大肠来谈起 | GreptimeDB 如何提高多步操作的容错能力

Greptime 格睿科技

数据库 云原生 时序数据库 procedure

CloudQuery 社区版重启 | 我们做了哪些准备?

BinTools图尔兹

数据库 社区版 数据库管理系统

Excel 进阶|只会 Excel 也能轻松搭建指标应用啦

Kyligence

数据分析 Excel数据分析 指标平台

智慧公厕:现代科技与城市卫生的完美结合

光明源智慧厕所

智慧城市 智慧物业 智慧机场

分享:从数据库开发者的视角,预测5个开发趋势

OceanBase 数据库

数据库 oceanbase

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