这是我迄今为止遇到的最愚蠢的错误。我曾有一个Fragment
应用程序完美适用于API , and Force Closing
on API > 11.
我真的不明白他们在里面改变了什么Activity
调用中的生命周期saveInstance
,但我这里是解决这个问题的方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
//No call for super(). Bug on API Level > 11.
}
我只是不打电话给.super()
一切都很好。我希望这能为您节省一些时间。
EDIT:经过更多研究后,这是已知的bug http://code.google.com/p/android/issues/detail?id=19917在支持包中。
如果您需要保存实例,并向您的实例添加一些内容outState
Bundle
您可以使用以下内容:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
super.onSaveInstanceState(outState);
}
EDIT2:如果您尝试在完成交易后执行交易,也可能会发生这种情况Activity
已在后台消失。为了避免这种情况,你应该使用commitAllowingStateLoss()
EDIT3:据我所知,上述解决方案修复了早期 support.v4 库中的问题。但如果您对此仍有问题MUST还读过@亚历克斯洛克伍德 https://stackoverflow.com/users/844882/alex-lockwood的博客:片段事务和活动状态丢失 http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
博客文章摘要(但我强烈建议您阅读):
-
NEVER
commit()
之后的交易onPause()
在蜂巢之前,并且onStop()
后蜂窝
- 在内部提交交易时要小心
Activity
生命周期方法。Use onCreate()
, onResumeFragments()
and onPostResume()
- 避免在异步回调方法内执行事务
- Use
commitAllowingStateLoss()
仅作为最后的手段