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

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

关注

评论

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

面向对象开发

Jason199

面向对象 js 6月月更

牛客java选择题每日打卡Day2

京与旧铺

6月月更

模块五(微博评论)

Geek_701557

词法陷阱(C)

fy

c C陷阱与缺陷

读配置、讲原理、看面试真题,我只能帮你到这了。。。

阿Q说代码

redis 主从架构 增量同步 全量同步 过期key处理

论一个优秀红队人员的自我修养

穿过生命散发芬芳

6月月更 攻防演练 自我修养

程序猿职业发展9项必备软技能

慕枫技术笔记

职业发展 6月月更

记一次给OpenHarmony提交代码的过程

坚果

OpenHarmony 6月月更

SDN系统方法 | 9. 接入网

俞凡

架构 网络 sdn SDN系统方法

商城风格也可以很多变,DIY 了解一下!

CRMEB

一文搞懂php中的(DI)依赖注入

乌龟哥哥

6月月更

你真的需要自动化测试吗?

老张

软件测试 自动化测试

16 种企业架构策略

涛哥 数字产品和业务架构

企业架构

编程技巧│提高 Javascript 代码效率的技巧

JavaScript 编程效率 6月月更 美化程序

Linux网络编程_网卡操作指令与TCP协议介绍

DS小龙哥

6月月更 socket网络编程

绕过技术聊"跨端"......

hiisea

前端架构 前端框架 跨端开发 小程序框架 跨端框架

vue项目的创建和托管【ForVue3】

Python研究所

6月月更

说下你对方法区演变过程和内部结构的理解

阿Q说代码

Java JVM 方法区 元空间 永久代

自动化测试

IT蜗壳-Tango

6月月更

被疫情偷走的时间都去哪了 | 社区征文

宇宙之一粟

时间管理 居家办公 6月月更 初夏征文

Wireshark的HTTP请求包和响应包如何对应

程序员欣宸

Wireshark 6月月更

2022年首期Techo Day腾讯技术开放日将于6月28日线上举办

科技热闻

Google I/O 2022: Android Jetpack 最新进展

fundroid

android Google android jetpack

学习React源码的五个层次

郭明

React

Neat Syntax Design of an ETL Language (Part 2)

Bright

数据开发 ETL 大数据开发 EasySQL

Mysql 源码阅读(二)登录连接调试

MySQL 源码

不要小看了积分商城,它的作用可以很大!

CRMEB

Object.defineProperty也能监听数组变化?

德育处主任

JavaScript Vue 原理分析 数据变更跟踪 6月月更

Rxjs TakeUntil 操作符的学习笔记

汪子熙

typescript 响应式编程 angular RXJS 6月月更

语法"陷阱"

fy

c 语法陷阱

DevEco Studio 3.0编辑器配置技巧篇

坚果

OpenHarmony 6月月更

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