为什么要采用 Compose
更少的代码
编写更少的代码会影响开发的各个阶段:作为作者,您可以专注于手头的任务,减少测试和调试的工作量,并减少出现错误的可能性;作为审核人员或维护人员,您需要阅读、理解、审核和维护的代码更少。
与使用 Android View 系统相比,Compose 允许您用更少的代码做更多的事情:按钮、列表或动画 - 无论您需要构建什么,现在都需要编写的代码更少。以下是一些合作伙伴的看法
- “对于相同的 Button 类,[代码] 的大小要小 10 倍。” (Twitter)
- “对于使用 RecyclerView 构建的任何屏幕来说,代码量也大幅减少,而我们的大多数屏幕都是这样构建的。” (Monzo)
- “我们很高兴看到在我们的应用程序中创建列表或动画所需的代码行数如此之少。我们每个功能编写的代码行数更少,这让我们能够更加专注于为客户提供价值。” (Cuvva)
您编写的代码仅用 Kotlin 编写,而不是将其拆分为 Kotlin 和 XML 之间:“当所有代码都用相同的语言(通常是同一个文件)编写时,跟踪代码要容易得多,而不是在 Kotlin 和 XML 之间来回切换” (Monzo)
用 Compose 编写的代码无论您构建什么都简单易于维护。“Compose 的布局系统在概念上更简单,因此更容易推理。读取复杂组件的代码也更容易。” (Square)
直观
Compose 使用声明式 API,这意味着您只需描述您的 UI - Compose 会处理剩下的事情。API 很直观 - 易于发现和使用:“我们的主题层变得更加直观和易读。我们能够在一个 Kotlin 文件中完成之前需要多个 XML 文件(负责属性定义和通过多个分层主题叠加分配属性)才能完成的工作。” (Twitter)
使用 Compose,您可以构建不绑定到特定活动或片段的小型无状态组件。这使得它们易于重用和测试:“我们给自己设定了一个目标,就是要提供一组新的 UI 组件,这些组件应该是无状态的、易于使用和维护的,并且易于实现/扩展/自定义。Compose 确实为我们提供了可靠的解决方案。” (Twitter)
在 Compose 中,状态是显式的,并且传递给可组合函数。这样一来,状态就有一个唯一的真相来源,使其封装起来并解耦。然后,当应用程序状态发生变化时,您的 UI 会自动更新。“当您推理某事时,您需要记住的东西更少,不受您控制或理解不充分的行为也更少” (Cuvva)
加速开发
Compose 与您现有的所有代码兼容:您可以从 View 调用 Compose 代码,也可以从 Compose 调用 View。大多数常用库(如 Navigation、ViewModel 和 Kotlin 协程)都与 Compose 兼容,因此您可以根据需要随时随地开始采用它。“我们从集成 Compose 开始,发现它“可以正常工作”。我们发现,我们不必考虑诸如明暗模式之类的事情,整个体验非常无缝。” (Cuvva)
利用 Android Studio 的全面支持,包括实时预览等功能,您可以更快地迭代和发布代码:“Android Studio 中的预览功能节省了大量时间。能够构建多个预览也为我们节省了时间。通常我们需要在不同的状态或不同的设置下检查 UI 组件——例如错误状态,或不同的字体大小等。通过创建多个预览,我们可以轻松地检查这一点。” (Square)
强大
Compose 使您能够通过直接访问 Android 平台 API 并内置支持 Material Design、深色主题、动画等来创建精美的应用程序:“Compose 不仅解决了声明式 UI 的问题——可访问性 API、布局、各种东西都得到了改进。您想要创建的东西与实际创建它的步骤之间减少了。” (Square)
使用 Compose,通过动画为您的应用程序带来动感和活力变得快速而容易实现:“在 Compose 中添加动画非常容易,几乎没有理由不为颜色/大小/海拔变化等内容添加动画” (Monzo),“您可以创建动画而无需任何特殊操作——这与显示静态屏幕没有什么不同” (Square)
无论您是使用 Material Design 还是自己的设计系统进行构建,Compose 都能为您提供灵活性,以实现您想要的设计:“将 Material Design 与基础分离对我们来说非常有用,因为我们正在构建自己的设计系统,该系统通常需要与 Material 不同的设计要求。” (Square)
查看深入的案例研究,了解有关 Twitter、Square、Monzo 和 Cuvva 如何使用 Compose 的更多信息。