내 앱은 많은 Android 플랫폼 (4.1, 4.0.4, 2.3.6 ...)에서이 문제를 계속보고합니다. 하지만 휴대 전화에서이 문제를 재현하지 못했습니다. Google에서이 문제를 검색했지만 스택 추적이 내 문제와 같지 않은 것으로 보입니다.FragmentManager의 IllegalStateException
누군가 어떻게 문제가 발생했는지 알고 있습니까? 그리고 그것을 막는 방법? 또는이 오류를 어떻게 재연 할 수 있습니까? 감사합니다.
스택 추적 :
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:278)
at android.view.View.dispatchAttachedToWindow(View.java:12064)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2707)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2714)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1339)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1131)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4611)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
at dalvik.system.NativeStart.main(Native Method)
-------------------- 편집 --------------- ----- 조나단으로
:
나는 두 조각이있다. 그리고 하나의 조각 만이 콜백을 덮어 씁니다. 코드는 아래와 같습니다. 그리고 이후 다른 콜백을 덮어 쓰지 않습니다. 덮어 쓰는 또 다른 콜백은 onResume
콜백입니다. 코드는 다음과 같습니다.
조각 :
@Override
public void onPause() {
super.onPause();
if (mView instanceof MyView) {
MyView my = (MyView) mView;
my.onPause();
}
}
@Override
public void onResume() {
super.onResume();
if (mView instanceof MyView) {
MyView my = (MyView) mView;
my.onResume();
}
}
MYVIEW :
public void onPause() {
pause = true;
}
public void onResume() {
pause = false;
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
mDialog = null;
}
}
나는 또한 onAttachedToWindow()
가 onPostResume()
전에 다음 문제가됩니다 호출 할 경우 보인다 FragmentActivity
/FragmentManager
의 코드를 추적 우연히 있다. onAttachedToWindow()
을 onPostResume()
전에 호출 할 수 있습니까?
FragmentTransaction.commit()
으로 사용하는 것입니다 당신은 조각의 수명주기에서 나중에 onPause에 대한 콜백에서 아무것도() 또는 아무것도 있습니까? – Jonathan화면 회전과 'onSaveInstanceState'에 의한 문제 일 가능성이 큽니다. 'FragmentTabHost.onAttachedToWindow' 행을 확인하십시오 : 278. 또한'FragmentTabHost'에 대한 코드를 제공 할 수 있다면. – LuckyMe
@LuckyMe FragmentTabHost는 Android 소스에 포함되어 있으며 사용자가 구현 한 것이 아닙니다. – Jonathan