我在 Fragment 生命周期中遇到了麻烦,需要一个解决方案来摆脱它
I have a trouble in Fragment life cycle and need a resolution to come out of it
我对此进行了充分的研究,但没有一个明确的解决方案。
在生命周期中,特别是在Fragment生命周期中,在onPause()之后的任何时刻都会出现Exception。
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
我的逻辑是,要继续当前片段,在它达到此状态后,我必须重新启动 activity 并再次使用 Intent 指向预期的片段。
我想弄清楚正在发生的事情以及处理它的真正解决方案。
我需要知道这个机制的优缺点;它在 Fragment 或 Activity 生命周期中的重要性。
此外,如果我将 onCreate 中的 Windows 功能更改为不进入睡眠状态,除非用户手动按下主页按钮,否则 activity 仍会转到此状态?
如果您在 Activity
暂停时尝试以任何其他方式 Fragment
add/remove/replace/interact,则会发生此异常。
这意味着如果Activity
将立即被销毁,将无法恢复它的状态(恢复已更改的片段的状态)。
这里的最佳解决方案是检查 Activity 在与片段交互期间 未暂停 。
另一种选择是使用 commitAllowingStateLoss()
与 Fragment 事务进行交互,但有丢失其状态的风险。
在理想情况下,您应该仔细分析每次崩溃并添加检查以验证您是否仅在 Activity
启动且 运行.
时才与片段进行交互
新的 Android 开发人员参考和使用 JetPack Life Cycle Listener 的指南文档中提供了更好的解释。
https://developer.android.com/topic/libraries/architecture/lifecycle#kotlin
库使组件 Activity 生命周期感知。这意味着您不需要覆盖每个生命周期回调的抽象基础Activity class,并将该状态记录在布尔变量中。 LifeCycle 侦听器将为您完成。
您所要做的就是停止引入新片段或停止任何在 UI 响应 returns 时更新 UI 的加载器。执行此操作的正确时间是在调用 onStop 或 onSavedInstance 状态之前,您的组件将意识到这一点。
它明确指出,在调用 onSavedInstancState 或 onStop 之后,UI 变得不可变,直到再次调用 Activity 的 onStart。有时您必须使用 NEW TASK 和 CLEAR TASK 标志使用 intent 调用相同的 activity 重新启动,当此状态发生时,否则将不会调用 onStart。
快乐编码:-)
我对此进行了充分的研究,但没有一个明确的解决方案。
在生命周期中,特别是在Fragment生命周期中,在onPause()之后的任何时刻都会出现Exception。
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
我的逻辑是,要继续当前片段,在它达到此状态后,我必须重新启动 activity 并再次使用 Intent 指向预期的片段。
我想弄清楚正在发生的事情以及处理它的真正解决方案。
我需要知道这个机制的优缺点;它在 Fragment 或 Activity 生命周期中的重要性。
此外,如果我将 onCreate 中的 Windows 功能更改为不进入睡眠状态,除非用户手动按下主页按钮,否则 activity 仍会转到此状态?
如果您在 Activity
暂停时尝试以任何其他方式 Fragment
add/remove/replace/interact,则会发生此异常。
这意味着如果Activity
将立即被销毁,将无法恢复它的状态(恢复已更改的片段的状态)。
这里的最佳解决方案是检查 Activity 在与片段交互期间 未暂停 。
另一种选择是使用 commitAllowingStateLoss()
与 Fragment 事务进行交互,但有丢失其状态的风险。
在理想情况下,您应该仔细分析每次崩溃并添加检查以验证您是否仅在 Activity
启动且 运行.
新的 Android 开发人员参考和使用 JetPack Life Cycle Listener 的指南文档中提供了更好的解释。
https://developer.android.com/topic/libraries/architecture/lifecycle#kotlin
库使组件 Activity 生命周期感知。这意味着您不需要覆盖每个生命周期回调的抽象基础Activity class,并将该状态记录在布尔变量中。 LifeCycle 侦听器将为您完成。
您所要做的就是停止引入新片段或停止任何在 UI 响应 returns 时更新 UI 的加载器。执行此操作的正确时间是在调用 onStop 或 onSavedInstance 状态之前,您的组件将意识到这一点。
它明确指出,在调用 onSavedInstancState 或 onStop 之后,UI 变得不可变,直到再次调用 Activity 的 onStart。有时您必须使用 NEW TASK 和 CLEAR TASK 标志使用 intent 调用相同的 activity 重新启动,当此状态发生时,否则将不会调用 onStart。
快乐编码:-)