java.lang.IllegalStateException не может выполнить это действие после onSaveInstanceState

#android

#Android

Вопрос:

Я прочитал много похожих вопросов, но до сих пор не смог найти ответ.

У меня есть приложение, развернутое на рынке, и я получаю некоторые отчеты о сбое IllegalStateException через BugSnag. Но я не могу воспроизвести его со своей стороны, вся информация, которая у меня есть для этой проблемы, взята из BugSnag.

Трассировка стека для моей проблемы

 java.lang.IllegalStateExceptionSplashScreenActivity
Can not perform this action after onSaveInstanceState

java.lang.IllegalStateException · Can not perform this action after onSaveInstanceState
FragmentManager.java:2044android.support.v4.app.FragmentManagerImpl.checkStateLoss  
FragmentManager.java:2067android.support.v4.app.FragmentManagerImpl.enqueueAction   
BackStackRecord.java:680android.support.v4.app.BackStackRecord.commitInternal   
BackStackRecord.java:634android.support.v4.app.BackStackRecord.commit   
FragmentTabHost.java:288android.support.v4.app.FragmentTabHost.onAttachedToWindow   
View.java:20011android.view.View.dispatchAttachedToWindow   
ViewGroup.java:3589android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewGroup.java:3596android.view.ViewGroup.dispatchAttachedToWindow  
ViewRootImpl.java:2262android.view.ViewRootImpl.performTraversals   
ViewRootImpl.java:1927android.view.ViewRootImpl.doTraversal 
ViewRootImpl.java:8558android.view.ViewRootImpl$TraversalRunnable.run   
Choreographer.java:949android.view.Choreographer$CallbackRecord.run 
Choreographer.java:761android.view.Choreographer.doCallbacks    
Choreographer.java:696android.view.Choreographer.doFrame    
Choreographer.java:935android.view.Choreographer$FrameDisplayEventReceiver.run  
Handler.java:873android.os.Handler.handleCallback   
Handler.java:99android.os.Handler.dispatchMessage   
Looper.java:214android.os.Looper.loop   
ActivityThread.java:7124android.app.ActivityThread.main 
Method.java:-2java.lang.reflect.Method.invoke   
RuntimeInit.java:494com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run 
ZygoteInit.java:975com.android.internal.os.ZygoteInit.main
 

Ниже приведена моя программная логика. FragmentTabHost используется только в . HomeActivity Его настройка выполняется полностью onCreate и не затрагивается в других обратных вызовах жизненного цикла.

логика программы

Из bugsnag я получаю следующую подсказку. Из хлебной крошки я вижу, что исключение возникает, когда пользователь нажимает home_key или recent_app сразу после запуска и на ранней стадии HomeActivity.

Хлебная крошка Мои вопросы:

  1. Почему исключение зарегистрировано в SplashScreenActivity, разве это действие не должно завершаться задолго до HomeActivity?
  2. Я вижу, что TabHost пытается зафиксировать транзакцию фрагмента после onSaveInstanceState() , но любые методы, которые включают фиксацию фрагментов, выполняются в onCreate , почему эти события фиксации запланированы после onPause ?

Комментарии:

1. Привет, Гарри. «Параметры разработчика» -> «Не сохранять действия» -> ВКЛЮЧЕНО, помогает воспроизвести его?

2. @Elletlar спасибо, просто интересно, почему «Не сохранять действия» поможет воспроизвести мою проблему?

3. Возможно. Это приведет к постоянному повторению действий. Я заметил, что ошибка произошла во время onSaveInstanceState, что означает, что фреймворк планировал воссоздать действие. Для каждого действия с включенным этим параметром вы можете попробовать перейти на рабочий стол и вернуться к принудительному восстановлению активности. Приветствия.