首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取异常"IllegalStateException:在onSaveInstanceState之后无法执行此操作“

获取异常"IllegalStateException:在onSaveInstanceState之后无法执行此操作“
EN

Stack Overflow用户
提问于 2011-09-19 17:50:07
回答 24查看 245.4K关注 0票数 362

我有一个Live Android应用程序,从市场上我收到了以下堆栈跟踪,我不知道为什么它会发生,因为它不是发生在应用程序代码中,而是由应用程序中的一些或其他事件引起(假设)

我没有使用片段,仍然有FragmentManager的引用。如果任何人可以揭示一些隐藏的事实,以避免这种类型的问题:

代码语言:javascript
复制
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)  
EN

回答 24

Stack Overflow用户

发布于 2011-11-09 08:50:17

如果您试图在调用片段活动的onSaveInstanceState()之后执行片段转换,则会发生此类异常。

发生这种情况的一个原因是,当活动停止时,您会让AsyncTask (或Thread)保持运行状态。

如果系统回收资源的活动并稍后重新创建活动,则调用onSaveInstanceState()之后的任何转换都可能丢失。

票数 37
EN

Stack Overflow用户

发布于 2013-10-23 07:23:00

在锁定\消隐屏幕并保存Activity +对话框的实例状态后,对对话框片段调用dismiss()时也会发生这种情况。要绕过此调用,请执行以下操作:

代码语言:javascript
复制
dismissAllowingStateLoss()

从字面上讲,每次我关闭一个对话框时,我都不再关心它的状态了,所以这样做是可以的--你实际上并没有丢失任何状态。

票数 20
EN

Stack Overflow用户

发布于 2017-11-20 21:31:08

我认为生命周期状态可以帮助防止这种崩溃,从Android support lib v26.1.0开始,你可以进行以下检查:

代码语言:javascript
复制
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)){
  // Do fragment's transaction commit
}

或者您可以尝试:

代码语言:javascript
复制
Fragment.isStateSaved()

更多信息请点击此处https://developer.android.com/reference/android/support/v4/app/Fragment.html#isStateSaved()

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7469082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档