50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

智能工厂中人工智能应用场景及技术分析

工赋开发者社区

华为云GaussDB入选“2022年数字技术融合创新应用解决方案”

平平无奇爱好科技

营销研发三年烧11.25亿负债200%,聚水潭的亏损反而是SaaS的“正面”鼓励

B Impact

这年头怕数据泄露?全密态数据库:无所谓,我会出手

平平无奇爱好科技

再获殊荣!华为云GaussDB喜提“科技进步一等奖”

平平无奇爱好科技

重磅新品全球公测!华为云数据库又有大动作

平平无奇爱好科技

一图讲清楚公众号扫码关注绑定手机号自动登录

越长大越悲伤

微信 公众号接入

黄瑾:做强坚实数据库底座,GaussDB与产业携手共进

平平无奇爱好科技

技术驱动,数据赋能,华为云GaussDB给世界一个更优选择

平平无奇爱好科技

强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

STC89C52+AT24C02实现设备开机次数记录

DS小龙哥

6 月 优质更文活动

再见Navicat,dbeaver才是真香

程序员小毕

Java 数据库 程序员 后端 架构师

强渡大渡河!华为云GaussDB成功支撑华为MetaERP系统全面替换

平平无奇爱好科技

无惧百万级并发,GaussDB(for Cassandra)让华为Push推送服务更快触达

轶天下事

精彩纷呈!LLUG 2023 北京场活动回顾来啦 | 视频回放已上线

OpenAnolis小助手

开源 龙蜥社区 LLUG Linux中国 沙龙回顾

车载手势识别技术的挑战和未来发展

数据堂

行业DBA走进华为,共建数据库生态

平平无奇爱好科技

SQL 优化(二):避免隐式转换

hungxy

新应用爆发,开启5G的鱼龙之变

脑极体

5G

华为云GaussDB以技术创新引领金融行业分布式转型

平平无奇爱好科技

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

BI分析能力:当今企业必备核心竞争力

夜雨微澜

智能工厂 | 上海三菱电梯有限公司电梯智能工厂

工赋开发者社区

华为云GaussDB践行数字化,护航证券保险高质量发展

平平无奇爱好科技

NineData入驻华为云“联营联运”商品,为企业数据提供安全保障

平平无奇爱好科技

瓴羊Quick BI四度入选魔力象限报告,标志着BI系统的国产化进程加速

对不起该用户已成仙‖

莲子数据与阿里云开源PolarDB合作助力制造业数字化转型

阿里云数据库开源

polarDB PolarDB-X PolarDB-PG

强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

【深入浅出Docker原理及实战】「Docker安装说明」零基础+全方位带你学习探索Docker容器开发实战指南(Ubuntu、Debian)

码界西柚

Docker 容器 容器化部署

PostgreSQL插件那么多,怎样管理最高效?

平平无奇爱好科技

C++的重载运算符和重载函数

芯动大师

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