代码之家  ›  专栏  ›  技术社区  ›  Abhinav Saxena

我在碎片生命周期中遇到了麻烦,需要一个解决方案

  •  1
  • Abhinav Saxena  · 技术社区  · 6 年前

    我对此做了充分的研究,但没有一个明确的解决方案。

    java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    

    我的逻辑是,要继续处理当前片段,在它达到这种状态之后,我必须重新启动活动,并再次使用Intent指向预期的片段。

    我想弄清楚到底发生了什么,以及什么才是真正的解决办法。

    我需要知道这种机制的利弊;它在片段或活动生命周期中的重要性。

    另外,如果我将onCreate中的Windows功能更改为不进入睡眠状态,除非用户手动按下home按钮,否则活动仍将进入此状态吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Andrii Drobiazko    6 年前

    Fragment 内部 Activity 当它暂停的时候。

    活动 如果它马上被销毁,将无法恢复它的状态(恢复已更改的片段的状态)。

    未暂停 另一种选择是使用 commitAllowingStateLoss() 与片段事务交互,有失去状态的风险。

    请参见: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss()

    活动

        2
  •  1
  •   Abhinav Saxena    6 年前

    https://developer.android.com/topic/libraries/architecture/lifecycle#kotlin

    该库使组件活动生命周期具有感知性。这意味着您不需要覆盖每个生命周期回调并将该状态记录在布尔变量中的抽象baseActivity类。LifeCycle listener会帮你做的。

    它清楚地指出,在调用onSavedInstancState或onStop之后,UI变得不可变,直到再次调用活动的onStart。有时您必须使用NEW TASK调用restart同一活动,并使用intent清除任务标志,当这种状态发生时,不可能调用onStart。