【问题标题】:Single activity multiple fragments / separate activities in a multi-step flow?单个活动多个片段/多步骤流程中的单独活动?
【发布时间】:2019-04-19 10:53:41
【问题描述】:

我已经开发 Android 3 年了,当涉及到类似的场景时,这仍然是一件很难决定的事情。现在,我相信大多数应用程序都有一个多步骤的屏幕/流程。

例如,预订流程。您需要执行几个步骤,例如选择机票、选择座位、选择产品详细信息,然后输入个人详细信息。每个步骤都可能需要上一步的一些数据。

我对此做了很多研究,阅读了很多reddit和SO的帖子,但仍然没有得出结论。

Google 告诉我们为灵活的 UI 使用 Fragment,Jake Wharton 也提到“您可以使用 Fragment,但不要使用它的 backstack。”

我应该使用具有多个片段的单个活动作为步骤,还是使用单独的活动,每个活动代表一个步骤?

目前,我正在使用第一种方法,通过将片段添加到后台堆栈中,并在弹出时恢复其数据状态(用户按回)。但是,我需要在所有文本视图上设置“freezesText”,并确保 recyclerview 适配器位于片段 onCreate 中以保留其状态。可能会有更多的痛苦。

我什至编写了一个自定义片段容器/管理器来无缝维护我的片段。

https://github.com/Veeyikpong/easyfragmentcontainer/blob/master/src/main/java/com/veeyikpong/easyfragmentcontainer/FragmentContainer.kt

我看到许多消息来源提到活动转换更昂贵。因此,我编写了两个模拟场景的应用程序来比较性能。两个应用程序提供相同的屏幕和结果,使用 MVP arch 开发。这些应用程序将新闻拉入列表,您可以按它们查看详细信息。

具有两个片段的单个活动:https://github.com/Veeyikpong/fastNewsFragment

单独活动:https://github.com/Veeyikpong/fastNewsActivity

我将它们与 Android studio profiler 进行了比较,发现内存消耗没有太大差异,但单独的活动应用程序的代码大小较小 (10216kb),而带有片段的应用程序为 14000kb。

FastNewsActivity

FastNewsFragment

根据测试,我并没有注意到它们之间有太大的不同,当然,仅用活动来开发要快得多。我做错测试了吗?请就这种情况提出建议。

或者我应该尝试 Google 的新导航组件吗?他们说它将为您处理 FragmentTransactions 的复杂性。

【问题讨论】:

    标签: android performance android-fragments android-activity fragment-backstack


    【解决方案1】:

    我建议您针对不同的功能使用不同的活动。 从您的预订流程示例中 --> 选择机票、选择座位、选择产品详细信息,然后输入个人详细信息

    每一步都是自己的世界。 例如,在选择座位中,您可能会显示座位布局、每个座位的定价甚至图像。 流程的每一步都有数据流。而且这些步骤中的每一个都可能随着时间的推移而演变成具有许多功能。这为每个步骤使用一个活动提供了完美的案例。

    如果你在back stack上使用了单个activity和fragment,在一段时间内管理生命周期和数据流将变得非常非常复杂。

    但是考虑一个带有用户和密码按钮的登录功能。有可能在许多地方使用此功能。前任。用户可以从登录屏幕登录,或者他可以在付款时登录,甚至在用户输入他的详细信息时登录。这为片段提供了完美的案例(一次编码,并在许多地方使用)。

    希望这是有道理的。:)

    【讨论】:

    • 我理解他的场景,所以如果从不同的地方调用登录活动(或任何)不是一个好主意,那么只有当你需要在不同的屏幕上使用多个流时才使用片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多