我有一个Live Android应用程序,从市场上我收到了以下堆栈跟踪,我不知道为什么它会发生,因为它不是发生在应用程序代码中,而是由应用程序中的一些或其他事件引起(假设)
我没有使用片段,仍然有FragmentManager的引用。如果任何人可以揭示一些隐藏的事实,以避免这种类型的问题:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109)
at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399)
at android.app.Activity.onBackPressed(Activity.java:2066)
at android.app.Activity.onKeyDown(Activity.java:1962)
at android.view.KeyEvent.dispatch(KeyEvent.java:2482)
at android.app.Activity.dispatchKeyEvent(Activity.java:2274)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1720)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1258)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1668)
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2851)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2824)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2011)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4025)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
发布于 2011-11-09 08:50:17
如果您试图在调用片段活动的onSaveInstanceState()
之后执行片段转换,则会发生此类异常。
发生这种情况的一个原因是,当活动停止时,您会让AsyncTask
(或Thread
)保持运行状态。
如果系统回收资源的活动并稍后重新创建活动,则调用onSaveInstanceState()
之后的任何转换都可能丢失。
发布于 2013-10-23 07:23:00
在锁定\消隐屏幕并保存Activity +对话框的实例状态后,对对话框片段调用dismiss()
时也会发生这种情况。要绕过此调用,请执行以下操作:
dismissAllowingStateLoss()
从字面上讲,每次我关闭一个对话框时,我都不再关心它的状态了,所以这样做是可以的--你实际上并没有丢失任何状态。
发布于 2017-11-20 21:31:08
我认为生命周期状态可以帮助防止这种崩溃,从Android support lib v26.1.0开始,你可以进行以下检查:
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)){
// Do fragment's transaction commit
}
或者您可以尝试:
Fragment.isStateSaved()
更多信息请点击此处https://developer.android.com/reference/android/support/v4/app/Fragment.html#isStateSaved()
https://stackoverflow.com/questions/7469082
复制相似问题