为何采用 Compose
更少的代码
编写更少的代码会影响开发的各个阶段:作为开发者,您可以专注于手头的问题,减少测试和调试的工作量,并降低出现 bug 的可能性;作为评审者或维护者,您需要阅读、理解、评审和维护的代码量也更少。
与使用 Android View 系统相比,Compose 允许您用更少的代码做更多的事情:无论是按钮、列表还是动画——无论您需要构建什么,现在编写的代码都更少。以下是我们的部分合作伙伴的评价:
- “对于同一个 Button 类,它[代码]的规模缩小了 10 倍。” (Twitter)
- “对于使用 RecyclerView 构建的任何屏幕,代码量也显著减少,而我们的大多数屏幕都使用了 RecyclerView。” (Monzo)
- “我们很高兴地看到,在我们的应用中创建列表或动画所需的代码行数非常少。我们每个功能编写的代码行数更少,这使我们能够更专注于为客户提供价值。” (Cuvva)
您编写的代码完全用 Kotlin 编写,而无需在 Kotlin 和 XML 之间进行拆分:“当所有代码都用同一种语言编写,并且通常在同一个文件中时,跟踪代码要容易得多,而无需在 Kotlin 和 XML 之间来回切换。” (Monzo)
无论您构建什么,用 Compose 编写的代码都简单易维护。“Compose 的布局系统在概念上更简单,因此更容易理解。阅读复杂组件的代码也更容易。” (Square)
直观
Compose 使用声明式 API,这意味着您只需描述您的 UI,其余部分由 Compose 处理。这些 API 直观易用:“我们的主题层变得更加直观和易读。我们可以在单个 Kotlin 文件中完成原本需要通过多个分层主题叠加来负责属性定义和分配的多个 XML 文件才能完成的工作。” (Twitter)
使用 Compose,您可以构建小巧、无状态的组件,这些组件不与特定的 Activity 或 Fragment 绑定。这使得它们易于重用和测试:“我们为自己设定了一个目标,即提供一套新的 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)