【问题标题】:Multiple Activity or Single Activity and multiple fragments多活动或单活动和多个片段
【发布时间】:2017-07-03 08:21:47
【问题描述】:

我有一个非常笼统的问题,我没有找到具体的答案,因此再次提出。

我想在两种方法之间做出选择

  1. 针对各种屏幕和任务的专用活动,以避免复杂性和问题
  2. 针对不同任务的单个 Activity 和多个 Fragment,用户可以像 Activity 一样导航,持有 Fragment A 用户将导航到 Fragment B、Fragment C,这可以是来回事务。

我想知道什么?

  1. Activity 转换对于处理器来说是昂贵的还是为了实现简单性而内存开销可以忽略不计?
  2. Fragment 需要通过转换来管理生命周期,那么这种生命周期管理会带来什么问题?
  3. 通过保存片段状态来处理片段事务有多容易?

我们现在不知道片段可以保存多少数据。

【问题讨论】:

  • 据我所知,片段的一种用途是您可以使用它来解耦代码,从而防止活动变得庞大。这对于维护代码和保持简单很重要。

标签: android android-fragments android-activity


【解决方案1】:

嗯,这完全取决于应用程序的设计、流程和导航。

以下是使用单活动和多片段的一些好处:

  1. 性能片段事务比创建新活动快。
  2. 导航抽屉和工具栏,通过单一活动轻松管理。
  3. 可以在任何地方使用相同的上下文。
  4. Fragment 的 setRetainInstance 在管理方向更改时非常有用。

有了它,有几个缺点:

  1. 大量代码使活动变得非常混乱。
  2. 处理按钮后按很繁琐,因为只有 Activity 可以处理,片段不能。

我个人使用具有多个片段的多个活动,其中我根据模块分离活动。在同一个模块中,可以在片段中创建子模块。我发现在不同情况下管理起来很容易,就像应用程序关闭、重新打开、通知中、方向更改一样。

【讨论】:

  • 我们也可以在Fragment中处理onBackPress()。创建一个单独的类 FragmentBackHelper,这将扩展 Fragment,并将实现 IOnBackPressed。现在在 IOnBackPressed 中创建单独的接口名称,并使用此代码。公共接口 IOnBackPressed { boolean onBackPressed(); } 。现在无论你想处理 onBackPress(),只要扩展这个类。 “FragmentBackHelper”。
  • 哥们,Fragment类的onBackPressed()方法在哪里,你可以通过实现接口在Fragments中创建自定义方法,但最终会从Activity的onBackPressed触发,对吧?
  • 是的,使用它,我们可以处理 onBackPress(),对吧?我知道它会调用 Activity 的 onBackPress,但我们仍然可以在 onBackPress() 中做任何我们想做的事情,对吧?如果我错了,请帮助我理解。
  • 你是对的。但是片段事务到弹出片段,应用检查以查找堆栈中有多少片段并检查导航抽屉的状态等将仅在活动中完成。如果有额外的工作需要转移到 Fragment,那么你可以使用这些 Fragment。
【解决方案2】:

我的问题是一样的,到目前为止,在我的所有应用程序中,只有一个 Activity,其余的都是 Fragments。我同意很难维护 Fragment,但是使用 Fragment 会提高您的性能。

假设,举个例子,

我有 10 个 Activity,在每个 Activity 中,我调用 Async Task 来执行一些后台操作。在每个异步任务的 onPostExecute() 中,您都在更新您的 UI。但是在完成 doInBackground() 之前,您切换了 Activity 并且该 Activity 被销毁,但请记住 doInBackground() 仍在进行中,一旦完成,将调用 onPostExecute ,并且在 onPostExecute() 中我们正在更新 UI,但是 Activity 被破坏了,所以这会在你的应用程序中造成泄漏。 但是,如果您只维护一个 Activity,那么维护起来会很容易。

也等待别人的意见。

【讨论】:

  • 为了防止泄漏,您可以使用异步任务加载器。并且仅出于泄漏原因您正在使用片段,那么您还应该尝试加载程序。它们比异步任务更有效
  • 我只是举了一个例子,我也很困惑该用哪一个。如果我们使用 Fragments,GPU Overdraw 会更多,但在 Activity 中,GPU Overdraw 会更少,我认为......所以看到有很多优点和缺点。
【解决方案3】:

除了上面的答案,我想补充几点可以帮助决定何时使用 Fragment 以及何时使用 Activity。

  • 如果您支持更大的屏幕尺寸,片段肯定比活动更受欢迎。
  • 当您认为某些代码可以在多个屏幕中重用时,您可以使用可在不同地方重用的片段

【讨论】:

    【解决方案4】:

    补充一点,支持“单Activity多片段”。

    有时您可能需要一个组件(例如横幅广告)在应用的不同页面/屏幕之间持续存在。如果您有多个Activities,则需要在每个Activities 上重新创建该组件。但是,如果您有一个 Activity,您只需将该组件添加到 Activity 布局中就可以忘记它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多