【问题标题】:Fragment and parent activity life cycle together片段和父活动生命周期在一起
【发布时间】:2013-12-10 14:49:28
【问题描述】:

我正在关注Creating a FragmentHandling the Fragment LifecycleManaging the Activity LifecyclePausing and Resuming an Activity 这四个主题。所以我对此有点怀疑。 我的问题是

  1. 如果 A Activity 调用 B ActivityIntent 但 A 没有调用 finish() 方法,则 A 将处于 Pause 状态,如果 B 是 TransparentSemiTransparent 并且处于 Stop说明 B 是否为Opaque。我说的对吗?
  2. 如果 A Activity 包含 Fragment F 则如果 A 将进入 Pause 状态,则 F 将进入 Pause 状态,如果 A 将处于 Stop 状态,则 F 将处于 Stop状态也。我说的对吗?
  3. 如果 A 调用 B Activity 而 B 是 Transparent,那么 A 将处于 Pause 状态,F 也会。如果 B 调用 finish(),那么 A 将进入 Resume 状态,但 F 会发生什么?它会从暂停中恢复吗?如果是这样,那么如何以及采取什么步骤,因为我没有看到 Fragment 生命周期中的任何直接链接,这表明 onPause()onResume() 直接作为 Activity 可以做。

    希望我能问我想要什么。对不起我的英语不好。

【问题讨论】:

    标签: android android-fragments android-activity


    【解决方案1】:
    1. 如果 B 是半透明的或部分可见的,你不能确定只有 onPause 会在 A 上被调用:

      暂停

      另一个活动在前台并且有焦点,但是这个 一个仍然可见。也就是说,另一个活动在顶部可见 这个和那个活动是部分透明的或不覆盖 整个屏幕。一个暂停的活动是完全活跃的(活动 对象保留在内存中,它维护所有状态和成员 信息,并保持附加到窗口管理器),但可以 在内存极低的情况下被系统杀死。

    2. 是的,你是对的:

      片段直接存在的 Activity 的生命周期 影响片段的生命周期,使得每个生命周期 活动的回调会导致每个活动的类似回调 分段。例如,当 Activity 收到 onPause() 时,每个 Activity 中的 Fragment 接收 onPause()。

      然而,反之则不然,这意味着如果一个片段接收到 onStop,那并不能保证 Activity 的 onStop 会被调用。

    3. 我不太清楚你最后一句话是什么意思,或者你是如何测试的。根据片段文档:

      public void onResume()

      当片段对用户可见时调用 并积极奔跑。这个一般是绑定到Activity.onResume的 包含Activity的生命周期

      之所以这么说,是因为它取决于 Activity 如何处理片段。

    【讨论】:

    • 实际上我在上一个语句中问我们知道,当一个 Activity 从 onPause 转到 onResume 时,它​​会直接转到 onStop 或 onStop 到 on Resume,它会转到 onStop ->onRestart -> onStart->onResume。但是活动中包含的片段是什么?您可以在片段生命周期中看到 onPause-> onStop ->onDestroyView ->onCreateView ->onActivityCreated -> onStart ->onResume。它会遵循这个吗?如果没有,那么为什么会有这个生命周期?
    【解决方案2】:
    1. 如果 A Activity 通过 Intent 调用 B Activity 但 A 没有调用 finish() 方法,则如果 B 为透明或半透明,则 A 将处于暂停状态,如果 B 为不透明,则 A 将处于停止状态。我说的对吗?

      是的,是的

    2. 如果 A Activity 包含 Fragment F,那么如果 A 将进入 Pause 状态,则 F 将进入 Pause 状态,如果 A 将处于 Stop 状态,则 F 也将处于 Stop 状态。我说的对吗?

      是的,正确

    3. 如果 A 调用 B Activity 并且 B 是透明的,则 A 将处于暂停状态,F 也将处于暂停状态。如果 B 调用 finish() 那么 A 将进入 Resume 状态,但 F 会发生什么?它会从暂停中恢复吗?如果是这样,那么如何以及采取什么步骤,因为我没有看到 Fragment 生命周期中的任何直接链接表明 onPause() 到 onResume() 直接作为 Activity 可以做的。

    您的理解是正确的,即使在这种情况下,片段也会像活动一样从 onPause 状态移动到 onResume 状态。 但不幸的是,在开发人员 android 中没有太多关于此的文档。 这可能是因为他们希望避免使用会造成更多混乱的复杂图表。

    【讨论】:

    • 不是答案,我只发现重复的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2022-08-16
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多