Trio:Airbnb的AndroidJetpackCompose屏幕架构框架

梦回故里归科技 2024-05-07 21:07:36

随着 Android 开发技术的不断演进,Airbnb 的 Android 团队开发了一种名为 Trio 的框架,旨在简化和优化基于 Jetpack Compose 的屏幕架构。Trio 建立在 Airbnb 开源的状态管理库 Mavericks 之上,提供了一种全新的方式来构建 Android 应用的屏幕组件。

Trio 简介

Trio 是一个高度模块化和可组合的框架,它通过将 UI、状态管理和导航逻辑分离,使得 Android 应用的开发更加高效和可维护。Trio 的核心概念包括:

Trio 类:定义了构成屏幕的三大要素——参数(Args)、属性(Props)、状态(State)和视图模型(ViewModel)。UI 类:负责渲染屏幕内容,并与视图模型交互以响应用户事件。视图模型(ViewModel):负责管理屏幕的状态,并通过状态流(State Flow)与 UI 类同步。class CounterScreen : Trio< CounterArgs, CounterProps, CounterState, CounterViewModel, CounterUI>class CounterScreen( initializer: Initializer<CounterArgs, CounterState>)class CounterScreen( initializer: Initializer<CounterArgs, CounterState>) : Trio< CounterArgs, CounterProps, CounterState, CounterViewModel, CounterUI>(initializer) { override fun createInitialState(CounterArgs, CounterProps) { return CounterState(args.count) }}

导航与状态管理

Trio 通过将导航状态存储在视图模型的状态中,实现了导航和状态管理的统一。这种方法简化了复杂的异步操作后的导航逻辑,并确保了视图模型状态与导航状态的同步。

class CounterViewModel : TrioViewModel { fun saveAndExit() = viewModelScope.launch { val success = performSaveRequest() setState { copy( trioStack = trioStack.dropLast(1), success = success ) } }}class ViewModelInitializer<S : MavericksState>( val initialState: S, internal val activityFlow: Flow<Activity?>, ...)class CounterViewModel( initializer: ViewModelInitializer) : TrioViewModel { fun saveAndOpenNextPage() = viewModelScope.launch { performSaveRequest() awaitActivity().startActivity() }}

模块化与代码复用

Trio 的设计支持大型应用的模块化开发。每个功能模块都有自己的路由(Router),这些路由与 Dagger 多绑定相结合,使得代码复用和模块化变得简单。

片段互操作

Trio 屏幕与现有的 Fragment 屏幕互操作非常重要,而 Trios 和 Fragments 需要轻松共存。

互操作性方法是双重的。首先,如果 Fragment 和 Trio 在创建时不需要动态共享信息(即,它们只接受初始参数并返回结果),那么在 Fragment 和 Trio 之间转换时,最容易启动新活动。这两种体系结构类型都可以在具有参数的新活动中轻松启动,并且可以选择在完成后返回结果,因此以这种方式在它们之间导航非常容易。

如果 Trio 和 Fragment 屏幕需要在屏幕都处于活动状态时在它们之间共享数据,或者它们需要共享太大而无法与 Arguments 一起传递的复杂数据,则 Trio 可以嵌套在“互操作片段”中,并且两个片段可以显示在同一活动中。Fragment 可以通过共享的 ViewModel 进行通信,类似于 Fragment 通常与 Mavericks 共享 ViewModel 的方式。

Trio 的核心特性

类型安全的通信

Trio 通过 Props 实现了类型安全的跨模块通信。Props 是一组可以在 Trio 之间传递的数据和回调函数,它们在编译时就能确保类型正确性。

屏幕流管理

Trio 提供了一个标准的“屏幕流”实现,用于管理一系列相关屏幕的状态和导航。这种设计使得处理复杂的屏幕堆栈和共享状态变得更加容易。

开发工具支持

为了提高开发效率,Airbnb 开发了一个 Android Studio 插件,用于生成 Trio 的模板代码,包括路由、模拟和测试代码。

Trio 在 Airbnb 的应用

Trio 自 2021 年末开始设计,并在 2022 年中开始在 Airbnb 的生产环境中使用。截至 2024 年 3 月,已经有超过 230 个 Trio 屏幕在 Airbnb 获得显著的生产流量。开发者普遍反馈积极,认为 Trio 提高了开发速度,减少了代码复杂性,并促进了最佳实践的采用。

结论与展望

Trio 作为 Airbnb 对 Android Jetpack Compose 屏幕架构的一种探索,已经在实践中证明了其价值。它不仅提高了开发效率,还增强了代码的可维护性和可读性。展望未来,Airbnb 将继续优化 Trio,并期待在 Compose 框架提供共享元素过渡等 API 后,进一步扩展其功能。

0 阅读:0

梦回故里归科技

简介:感谢大家的关注