这个是Android的一个BUG:
①当你按Home键的时候
②当你屏幕旋转的时候
③当你从FragmentActivit跳到Activity中的时候
这三种情况都会引起该异常。
原因:
stackoverflow上的大神在Android源代码中找到这样一段代码,如下:
- if (f.mSavedViewState != null) {
- if (result == null) {
- result = new Bundle();
- }
- result.putSparseParcelableArray(
- FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
- }
- if (!f.mUserVisibleHint) {
- // Only add this if it's not the default value
- result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
- }
- if (f.mSavedViewState != null) {
- if (result == null) {
- result = new Bundle();
- }
- result.putSparseParcelableArray(
- FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
- }
- if (!f.mUserVisibleHint) {
- if (result == null) {
- result = new Bundle();
- }
- // Only add this if it's not the default value
- result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
- }
解决方法:(全是到stackoverflow,谷歌代码找到的)
①重写onSaveInstanceState(Bundle outState),在该函数中不再调用super.onSaveInstanceState().(这种方法可以避免异常,仅仅是权宜之计,并不合理,不推荐使用该种方法)。
②重写onSaveInstanceState(Bundle outState),再调用super.onSaveInstanceState()之前,添加这样一句代码:
- setUserVisibleHint(true);
③在上面的大神已经给出了原因。因此为了不让result为null。重写onSaveInstanceState(Bundle outState),在调用super.onSaveInstanceState()之前,给outState添加一些内容即可。比如:
- outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
参考:
https://code.google.com/p/android/issues/detail?id=19917