Android 我在碎片生命周期中遇到了麻烦,需要解决它

Android 我在碎片生命周期中遇到了麻烦,需要解决它,android,fragment,lifecycle,Android,Fragment,Lifecycle,我对此做了充分的研究,但没有一个明确的解决方案 在生命周期中,特别是在片段生命周期中,onPause之后的任何时刻都会出现以下异常 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 我的逻辑是,要继续使用当前片段,在它达到这种状态后,我必须重新启动活动,并再次使用Intent指向预期的片段 我想弄清楚发生了什么,什么才是真正的解决办法 我需要知道这个机制的利弊;其在片段或

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

在生命周期中,特别是在片段生命周期中,onPause之后的任何时刻都会出现以下异常

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
我的逻辑是,要继续使用当前片段,在它达到这种状态后,我必须重新启动活动,并再次使用Intent指向预期的片段

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

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


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

当您试图在活动暂停时以任何其他方式添加/删除/替换/与活动内的片段交互时,会发生此异常

这意味着活动将无法恢复其状态。如果立即销毁已更改的片段,则恢复该片段的状态

这里最好的解决方案是检查在与片段交互期间活动是否没有暂停。 另一种选择是使用commitAllowingStateLoss与片段事务进行交互,有丢失其状态的风险

见:


在一个完美的世界中,您应该仔细分析每个崩溃并添加检查,以验证您仅在活动启动并运行时才与片段交互。

当您试图在活动暂停时以任何其他方式添加/删除/替换/与活动内的片段交互时,会发生此异常

这意味着活动将无法恢复其状态。如果立即销毁已更改的片段,则恢复该片段的状态

这里最好的解决方案是检查在与片段交互期间活动是否没有暂停。 另一种选择是使用commitAllowingStateLoss与片段事务进行交互,有丢失其状态的风险

见:


在一个完美的世界中,您应该仔细分析每个崩溃,并添加检查,以验证您仅在活动启动并运行时才与片段交互。

关于使用JetPack生命周期侦听器的新Android开发人员参考和指南文档中提供了更好的解释

该库使组件活动生命周期具有意识。这意味着您不需要覆盖每个生命周期回调的抽象baseActivity类,并将该状态记录在布尔变量中。LifeCycle listener将为您执行此操作

您所要做的就是停止引入新片段,或者停止在响应返回时更新UI的任何加载程序。执行此操作的正确时间是在调用onStop或onSavedInstance状态之前,您的组件将知道它

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


快乐编码:-

关于JetPack生命周期监听器的使用,新的Android开发者参考和指南文档提供了更好的解释

该库使组件活动生命周期具有意识。这意味着您不需要覆盖每个生命周期回调的抽象baseActivity类,并将该状态记录在布尔变量中。LifeCycle listener将为您执行此操作

您所要做的就是停止引入新片段,或者停止在响应返回时更新UI的任何加载程序。执行此操作的正确时间是在调用onStop或onSavedInstance状态之前,您的组件将知道它

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


快乐编码:-

谢谢@Andrii Drobiazko。更新了另一个查询问题:如果我将onCreate中的Windows功能更改为不进入睡眠状态,除非用户手动按下home按钮,否则活动是否仍将进入此状态?谢谢@Andrii Drobiazko。更新了另一个查询问题:如果我将onCreate中的Windows功能更改为不进入睡眠状态,除非用户手动按下home按钮,否则活动是否仍将进入此状态?