Flow、Cicerone、Fragnav、Simple stack的功能是什么?何时使用



我在带有3个选项卡的应用程序中使用BottomNavigationView。我想实现类似instagram的导航,保存每个片段的状态。首先我使用了导航组件,但很难保存每个选项卡(部分(的状态。然后我找到了一些库,比如flow、cicerone、fragnav、simple stack。

flow、cicerone、fragnav、simple stack的功能是什么?何时使用它们?

我有2个活动和MainActivity。Mvvm架构,dagger2,kotlin

我看到这个问题有点晚,我是Simple Stack的维护者,通过一些精心的搜索找到了这个问题。

不管怎样,

首先我使用了导航组件,但很难保存每个选项卡(部分(的状态。

从技术上讲,他们制作了一大块你可以包含的代码,现在可以让你管理N个navHostFragments,因此在一个应用程序中有多个后台包。

我不确定它是否能很好地扩展,但它确实能在旋转和死亡过程中发挥作用。

square/flow

Flow已经死了,Square现在正在处理工作流。

但Flow最初是一个跟踪屏幕列表[Screen1, Screen2]并使其在配置更改和进程死亡后仍然存在的解决方案。它们还允许您处理诸如[Screen1, Screen2]->以异步方式[Screen1, Screen2, Screen3](完成后必须调用一个完成回调(。

它有一些范围界定支持的元素。我试过了,但没能让这方面发挥作用。

Cicerone

Cicerone将导航命令排入队列,而没有人注册来处理这些命令。

否则,它会提供一些开箱即用的导航命令,以在一定程度上简化片段/活动导航。

Fragnav

FragNav的构建考虑到了对多堆栈的支持。理论上,它最多跟踪5个底部导航标签的碎片堆栈。

简单堆栈

Simple Stack是为了重写和替换square/flow的意图而编写的:1个堆栈,异步状态转换支持,在无人能够处理的情况下对导航操作进行排队,在配置更改和进程死亡之间保持/恢复导航状态。

Flow和Simple Stack之间的关键区别在于:

  • API命名约定(Flow有一些棘手的名称,如"Dispatcher"one_answers"Traversal",它们在称为StateChangerStateChange的简单堆栈中(

  • 更简单的生命周期集成(不再覆盖attachBaseContext(

  • 全新的范围界定支持,能够轻松地在屏幕之间共享数据,并持久化/恢复这些"数据"的状态;作用域服务";跨进程死亡,同时获得关于创建/销毁的重要生命周期回调(有点像ViewModels(

  • 完成:Flow保留为";α";版本,不再维护。


Flow和Simple Stack都是为了使Single Activity应用程序更易于开发而构建的。Jetpack Navigation也是如此。

Jetpack Navigation和Simple Stack都允许创建";屏幕之间共享的范围";,JN使用导航图范围的视图模型,而SS使用范围的服务。

无论如何,多堆栈都有点麻烦,FragNav直接支持开箱即用,简单堆栈有一个示例(Jetpack Navigation也有一个样本(。


选择任何一种看起来能以最小摩擦为您解决最多问题的工具。

最新更新