我从事Android的开发已经有3年了,要决定何时出现类似情况仍然很困难。如今,我相信大多数应用程序都具有多步骤的屏幕/流程。
例如,预订流程。您需要执行几个步骤,例如选择机票,选择座位,选择产品详细信息,然后输入个人详细信息。每个步骤可能需要上一步的一些数据。
我对此进行了大量研究,并阅读了reddit和SO的很多文章,但仍未得出结论。
Google告诉我们使用片段来实现灵活的UI,Jake Wharton还提到“您可以使用片段,但不要使用其堆栈”。
我应该将具有多个片段的单个活动作为步骤,还是将每个活动都代表一个步骤的单独活动?
当前,我正在使用第一种方法,将片段添加到Backstack中,并在弹出时恢复其数据状态(用户按回)。但是,我需要在所有textviews上设置“ freezesText”,并确保recyclerview适配器位于onCreate片段中以保留其状态。可能还会有更多的痛苦。
我什至编写了一个自定义片段容器/管理器来无缝地维护我的片段。
我看到许多消息来源提到活动转换的成本更高。因此,我编写了两个模拟场景的应用程序以比较性能。这两个应用使用MVP arch开发的屏幕和结果均相同。这些应用会将新闻放入列表中,您可以按它们以查看详细信息。
包含两个片段的单个活动:https://github.com/Veeyikpong/fastNewsFragment
单独的活动:https://github.com/Veeyikpong/fastNewsActivity
我将它们与Android Studio Profiler进行了比较,发现内存消耗没有太大差异,但是单独的活动应用程序的代码大小较小(10216kb),而带有片段的应用程序则为14000kb。
基于测试,我没有发现它们之间有很大的不同,当然,仅通过活动进行开发就会更快。我测试做错了吗?请针对这种情况提出建议。
还是应该尝试使用Google的新导航组件?他们说它将为您处理FragmentTransactions的复杂性。
答案 0 :(得分:0)
我建议您对不同的功能使用不同的活动。 从您的预订流程示例->选择机票,选择座位,选择产品详细信息,然后输入个人详细信息
每一步都是自己的世界。 例如,在某些座位中,您可能会显示座位布局,每个座位的价格甚至图像。 在流程的每个步骤中都有数据流。而且这些步骤中的每一个都可能随着时间的推移而演变为具有许多功能。这是为每个步骤使用一个活动的完美案例。
如果您使用了单个活动并在后堆栈上使用了片段,那么在一段时间内,管理生命周期和数据流将变得非常复杂。
但是考虑使用用户和密码按钮的登录功能。有可能在许多地方使用此功能。例如用户可以从登录屏幕登录,也可以在付款时甚至在输入详细信息时登录。这为片段提供了完美的案例(只需编写一次代码,并在许多地方使用)。
希望这很有意义。:)