Flow、Cicerone、Fragnav、Simple-stack 有哪些功能以及何时使用它们?
What are features of Flow, Cicerone, Fragnav, Simple-stack and when to use them?
我在带有 3 个选项卡的应用程序中使用 BottomNavigationView。我想实现像导航这样的 instagram,保存每个部分的片段状态。首先我使用了导航组件,但是很难保存每个选项卡(部分)的状态。然后我找到了一些库,比如 flow、cicerone、fragnav、simple-stack。
flow、cicerone、fragnav、simple-stack 有哪些特点以及何时使用它们?
我有 2 个 activity 和 MainActivity。 Mvvm 架构、dagger2、kotlin
我看到这个问题有点晚了,我是Simple-Stack的维护者,通过一些精心搜索发现了这个问题。
无论如何,
Firstly I used navigation component, but it is difficult to save states of each tab (section).
从技术上讲,他们制作了 this large block of code 您可以包含的内容,现在允许您管理 N navHostFragments,因此在一个应用程序中有多个后台堆栈。
我不确定它是否能很好地扩展,但它确实可以跨轮换和进程死亡工作。
square/flow
Flow 已死,Square 现在在 Workflow 上工作。
但 Flow 最初是一个跟踪屏幕列表的解决方案 [Screen1, Screen2]
并使其在配置更改和进程死亡时幸存下来。他们还允许您以异步方式处理 [Screen1, Screen2]
-> [Screen1, Screen2, Screen3]
等更改(完成后必须调用完成回调)。
它有一些范围支持的元素。我试过了,但无法让它的那个方面起作用。
Cicerone
Cicerone 将导航命令排入队列,但没有人注册处理它们。
否则,它有一些开箱即用的导航命令,可以稍微简化 fragment/activity 导航。
Fragnav
FragNav 在构建时考虑了多堆栈支持。理论上,它跟踪最多 5 个底部导航选项卡的片段堆栈。
Simple-Stack
编写 Simple-Stack 是为了重写和替换 square/flow
打算做的事情:1 个堆栈、异步状态转换支持、在没有人可以处理的情况下排队导航操作,persist/restore跨配置更改和进程死亡的导航状态。
Flow 和 Simple-Stack 之间的主要区别是:
API 命名约定(Flow 有一些棘手的名称,如“Dispatcher”和“Traversal”,它们在简单堆栈中称为 StateChanger
和 StateChange
)
更简单的生命周期集成(不再覆盖 attachBaseContext
)
全新的范围支持,能够轻松地在屏幕之间共享数据,persist/restore这些“范围服务”的状态跨进程死亡,同时获得重要的生命周期回调creation/destruction(有点像 ViewModels)
完成:Flow 保留为“alpha”版本,不再维护。
Flow 和 Simple-Stack 都是为了让 Single Activity 应用程序更容易开发而构建的。 Jetpack Navigation 也是如此。
Jetpack Navigation 和 Simple-Stack 都允许创建“屏幕之间共享的范围”,JN 使用导航图范围的视图模型,而 SS 使用范围服务。
无论如何,多堆栈都有点痛苦,FragNav 开箱即用地直接支持它,而简单堆栈 has a sample for it (and Jetpack Navigation also has a sample for it)。
选择任何一种工具,它似乎可以以最小的摩擦为您解决最多的问题。
我在带有 3 个选项卡的应用程序中使用 BottomNavigationView。我想实现像导航这样的 instagram,保存每个部分的片段状态。首先我使用了导航组件,但是很难保存每个选项卡(部分)的状态。然后我找到了一些库,比如 flow、cicerone、fragnav、simple-stack。
flow、cicerone、fragnav、simple-stack 有哪些特点以及何时使用它们?
我有 2 个 activity 和 MainActivity。 Mvvm 架构、dagger2、kotlin
我看到这个问题有点晚了,我是Simple-Stack的维护者,通过一些精心搜索发现了这个问题。
无论如何,
Firstly I used navigation component, but it is difficult to save states of each tab (section).
从技术上讲,他们制作了 this large block of code 您可以包含的内容,现在允许您管理 N navHostFragments,因此在一个应用程序中有多个后台堆栈。
我不确定它是否能很好地扩展,但它确实可以跨轮换和进程死亡工作。
square/flow
Flow 已死,Square 现在在 Workflow 上工作。
但 Flow 最初是一个跟踪屏幕列表的解决方案 [Screen1, Screen2]
并使其在配置更改和进程死亡时幸存下来。他们还允许您以异步方式处理 [Screen1, Screen2]
-> [Screen1, Screen2, Screen3]
等更改(完成后必须调用完成回调)。
它有一些范围支持的元素。我试过了,但无法让它的那个方面起作用。
Cicerone
Cicerone 将导航命令排入队列,但没有人注册处理它们。
否则,它有一些开箱即用的导航命令,可以稍微简化 fragment/activity 导航。
Fragnav
FragNav 在构建时考虑了多堆栈支持。理论上,它跟踪最多 5 个底部导航选项卡的片段堆栈。
Simple-Stack
编写 Simple-Stack 是为了重写和替换 square/flow
打算做的事情:1 个堆栈、异步状态转换支持、在没有人可以处理的情况下排队导航操作,persist/restore跨配置更改和进程死亡的导航状态。
Flow 和 Simple-Stack 之间的主要区别是:
API 命名约定(Flow 有一些棘手的名称,如“Dispatcher”和“Traversal”,它们在简单堆栈中称为
StateChanger
和StateChange
)更简单的生命周期集成(不再覆盖
attachBaseContext
)全新的范围支持,能够轻松地在屏幕之间共享数据,persist/restore这些“范围服务”的状态跨进程死亡,同时获得重要的生命周期回调creation/destruction(有点像 ViewModels)
完成:Flow 保留为“alpha”版本,不再维护。
Flow 和 Simple-Stack 都是为了让 Single Activity 应用程序更容易开发而构建的。 Jetpack Navigation 也是如此。
Jetpack Navigation 和 Simple-Stack 都允许创建“屏幕之间共享的范围”,JN 使用导航图范围的视图模型,而 SS 使用范围服务。
无论如何,多堆栈都有点痛苦,FragNav 开箱即用地直接支持它,而简单堆栈 has a sample for it (and Jetpack Navigation also has a sample for it)。
选择任何一种工具,它似乎可以以最小的摩擦为您解决最多的问题。