为了账号安全,请及时绑定邮箱和手机立即绑定

获取异常“IllegalStateException:onSaveInstanceState后无法

获取异常“IllegalStateException:onSaveInstanceState后无法

莫回无 2019-06-24 13:54:25
获取异常“IllegalStateException:onSaveInstanceState后无法执行此操作”我有一个LiveAndroid应用程序,我从市场上收到了下面的堆栈跟踪,我不知道为什么它在应用程序代码中没有发生,但它是由应用程序中的一些或另一个事件引起的(假设)我没有使用片段,仍然有FragmentManager的引用。如果有任何机构能够揭露一些隐藏的事实,以避免这类问题:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceStateat 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)
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

这是我迄今遇到的最愚蠢的错误。我有一个Fragment应用程序工作完美API<11,和Force Closing在……上面API>11.

我真的不知道他们在里面变了什么Activity调用中的生命周期saveInstance但我就是这样解决这个问题的:

@Overrideprotected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level > 11.}

我只是不打电话给.super()一切都很好。我希望这能帮你节省点时间。

编辑:经过进一步的研究,这是一个已知的虫虫在一揽子支援计划中。

如果您需要保存实例,并向您的outState Bundle您可以使用以下内容:

@Overrideprotected void onSaveInstanceState(Bundle outState) {
    outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
    super.onSaveInstanceState(outState);}

EDIT 2:如果您试图在您的Activity在背景中消失了。为了避免这种情况,您应该使用commitAllowingStateLoss()

EDIT 3:根据我的记忆,上述解决方案修复了早期Support.v4库中的问题。但如果你还对此有异议亦读@AlexLockwood的博客:碎片交易和活动状态损失

博客文章的摘要(但我强烈建议您阅读它):

  • 绝不可能 commit()

    之后的交易

    onPause()

    前蜂窝,和

    onStop()

    后蜂窝
  • 在内部提交事务时要小心

    Activity

    生命周期方法

    使用 onCreate()onResumeFragments()

    onPostResume()

  • 避免在异步回调方法中执行事务
  • 使用

    commitAllowingStateLoss()

    只是作为最后的手段


查看完整回答
反对 回复 2019-06-24
?
SMILET

TA贡献1796条经验 获得超4个赞

如果尝试在片段活动之后执行片段转换,就会出现这样的异常。onSaveInstanceState()会被打电话。

这会发生的原因之一是,如果你离开AsyncTask(或Thread)当活动停止时运行。

之后的任何过渡onSaveInstanceState()如果系统恢复资源活动并在以后重新创建该活动,则调用该活动可能会丢失。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 633 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信