AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

实践案例丨教你一键构建部署发布前端和Node.js服务

华为云开发者联盟

node.js 后端 服务器 代码 华为云鲲鹏

是时候学习Linux了

Simon

Linux

MySQL5.7升级到8.0过程详解

Simon

MySQL

我的敏捷历程 —— 兼评《敏捷整洁之道 - 回归本源》

FollowFlow

敏捷开发 Agile 极限编程 XP

面试必杀技,讲一讲Spring中的循环依赖

程序员DMZ

spring

Java-技术专题-synchronized关键字

码界西柚

SWARM学习1——Kademlia分布式路由表协议

AIbot

区块链 DHT 分布式存储 分布式文件存储 分布式路由

关于日期及时间字段的查询

Simon

MySQL sql查询

低/零代码干掉了传统的开发模式

代码制造者

编程语言 低代码 零代码 信息化 编程开发

影响音视频延迟的关键因素(一):流媒体系统

ZEGO即构

TCP udp RTC HLS RTMP

钓鱼网站:详解hosts文件

xcbeyond

Java 域名解析 hosts

SpringCloud服务注册中心双节点集群(Eureka集群)

xcbeyond

Java 架构 微服务 Eureka 集群

区块链、人工智能……警惕非法金融借创新概念迷惑投资人

CECBC

区块链 金融

恢复青春气息,就靠这套人像美肤算法了

博文视点Broadview

算法 计算机视觉 图像识别 人像

程序范式的意义

soolaugust

架构 程序设计

ARTS week 4

锈蠢刀

spring Cloud Eureka Rest接口重写

xcbeyond

Java SpringCloud Eureka

海量并发也没那么可怕,运维准点下班全靠它!

华为云开发者联盟

容器 网络 并发 华为云

操作系统bochs安装及使用

allworldg

操作系统

MySQL关于日期为零值的处理

Simon

MySQL

云上安全工作乱如麻,等保2.0来一下

华为云开发者联盟

安全 华为云 等保 云平台 多云服务

如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

程序员DMZ

spring 生命周期

MySQL索引问题探究手记

架构精进之路

MySQL 索引

易观郭炜:流动水系数造未来

易观大数据

枚举算法练习例题(Python版)

罗罗诺亚

Python 算法 枚举

写作只是消遣?

Geek_db1689

写作 讨论写作 自我感悟 瞎想乱写

跨域问题(CORS / Access-Control-Allow-Origin)

xcbeyond

Java CORS 跨域

面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗?

程序员DMZ

JVM i++

自从有了语音开黑小能手,队友再也不会骂我了!

anyRTC开发者

WebRTC 在线教育 直播 RTC RTMP

CRM往事丨三件事,所有SaaS的缩影

人称T客

一个数据库管理员的自我救赎之路

华为云开发者联盟

数据库 华为云 数据库迁移 企业上云 DRS

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