【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

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

关注

评论

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

【活动回顾】Databend 云数仓与 Databend Playground 扩展组件介绍

Databend

在 Excel 里研发俄罗斯方块;全国首例「AI 声音侵权案」审理丨 RTE 开发者日报 Vol.106

声网

打造绿色计算数智动力 HashData 入选“绿色计算最具价值解决方案”

酷克数据HashData

三大神医齐现身,竟为医院数据中心而来?

白洞计划

AI

深入学习Python与Vscode环境的安装与配置

申公豹

Python

马上2024年了,现在去开发一款App需要投入多少资金?

编程的平行世界

开发 Android Studio 成本管理

雅高与亚马逊云科技合作为宾客提供卓越体验

财见

纯干货|聊一聊大促活动背后的技术:火山引擎边缘云CDN/DCDN/GA

火山引擎边缘云

CDN CDN加速 加速 内容分发 CDN带宽

都是植物补光,为什么你的没效果?

电子信息发烧客

【写作训练营打卡|08】写作的四大问题踩坑点总结

写作

沉浸文旅体验!实时云渲染助力2023广东旅博会智慧文旅元宇宙体验馆上线

3DCAT实时渲染

元宇宙 实时渲染 实时云渲染 实时渲染云

Python从基础到进阶字符串验证

申公豹

Python

计算机设计大赛信息可视化设计的获奖经验剖析解读—4C大赛【全网最全万字攻略-获奖必读】

申公豹

可视化

敏感信息泄漏怎么破?来试试极狐GitLab 的密钥检测吧

极狐GitLab

DevOps 安全 DevSecOps 安全左移 密钥检测

利用机器学习实现客户细分:提升市场营销效果的技术策略

快乐非自愿限量之名

机器学习 框架 客户细分

一位CSDN的博主怀疑我抄袭他

Loken

音视频开发

基于Vue.js和Spring Boot的口罩自助售卖系统:设计、实现与技术深度解析

申公豹

系统

深入理解嵌入式系统中的GPIO控制与应用

申公豹

嵌入式

低代码与自动化:加速软件开发的新趋势

不在线第一只蜗牛

运维 自动化 低代码

SAP数据一键拉取!利用零代码ETL工具快速实现数据同步

RestCloud

数据同步 ETL SAP

统一观测丨使用 Prometheus 监控 Memcached 最佳实践

阿里巴巴云原生

阿里云 云原生

SD-WAN的降本增效作用是如何体现的

Geek一起出海

一款功率电子开关TP6062

攻城狮Wayne

基于STM32的物联网节点设计与实现-传感器数据采集与无线通信

申公豹

嵌入式

深入探索嵌入式系统开发:从LED控制到物联网集成

申公豹

嵌入式

Python 函数式编程让代码直接优雅起来

秃头小帅oi

C 语言注释和变量详解

小万哥

c c++ 程序员 后端 软件开发

Google Gemini Pro API专家级体验

Bob Lin

人工智能 AI openai LLM gemini

三大神医齐现身,竟为医院数据中心而来?

脑极体

数据中心

在Python中实现条形图动态追赶动画效果

申公豹

Python

嵌入式系统中的低功耗定时器应用与优化实战

申公豹

嵌入式

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