티스토리 뷰
'IllegalStateException: Can not perform this action after onSaveInstanceState with ViewPager' 오류 수정하기
맨날치킨 2022. 12. 22. 21:05Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
IllegalStateException: Can not perform this action after onSaveInstanceState with ViewPager
IllegalStateException: ViewPager에서 onSaveInstanceState 이후에 이 작업을 수행할 수 없습니다.
문제 내용
I'm getting user reports from my app in the market, delivering the following exception:
저는 앱 마켓에서 사용자로부터 다음 예외를 전달받고 있습니다.
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at 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.onKeyUp(Activity.java:2044)
at android.view.KeyEvent.dispatch(KeyEvent.java:2529)
at android.app.Activity.dispatchKeyEvent(Activity.java:2274)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803)
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:1855)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803)
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.widget.TabHost.dispatchKeyEvent(TabHost.java:297)
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:1855)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277)
at android.app.Activity.dispatchKeyEvent(Activity.java:2269)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803)
at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2880)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2853)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2028)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4028)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Apparently it has something to do with a FragmentManager, which I don't use. The stacktrace doesn't show any of my own classes, so I have no idea where this exception occurs and how to prevent it.
보고된 예외는 FragmentManager와 관련이 있다는 것 같지만, 저는 사용하지 않습니다. 스택트레이스에서는 제 클래스 중 어떤 것도 표시되지 않으므로, 이 예외가 어디에서 발생하는지와 어떻게 방지할 수 있는지 모르겠습니다.
For the record: I have a tabhost, and in each tab there is a ActivityGroup switching between Activities.
참고로, 저는 TabHost가 있는데 각 탭에서 ActivityGroup이 있고 ActivityGroup에서 Activity를 전환합니다.
높은 점수를 받은 Solution
Please check my answer here. Basically I just had to :
여기에서 제 답변을 확인해 주세요. 기본적으로 제가 해야 할 일은 다음과 같습니다:
@Override
protected void onSaveInstanceState(Bundle outState) {
//No call for super(). Bug on API Level > 11.
}
Don't make the call to super()
on the saveInstanceState
method. This was messing things up...
saveInstanceState 메서드에서 super() 호출을 하지 마십시오. 이것이 문제를 일으키고 있습니다...
This is a known bug in the support package.
이것은 support 패키지의 알려진 버그입니다.
If you need to save the instance and add something to your outState
Bundle
you can use the following:
만약 인스턴스를 저장하고 outState Bundle에 무언가를 추가해야 한다면, 다음을 사용할 수 있습니다:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
super.onSaveInstanceState(outState);
}
In the end the proper solution was (as seen in the comments) to use :
결국 적절한 해결책은 (댓글에서 확인할 수 있는 것처럼) 다음과 같이 사용하는 것이었습니다:
transaction.commitAllowingStateLoss();
when adding or performing the FragmentTransaction
that was causing the Exception
.
예외를 발생시킨 FragmentTransaction을 추가하거나 수행할 때, 해당 문제가 발생합니다.
가장 최근 달린 Solution
Fragment transactions should not be executed after Activity.onStop()
! Check that you do not have any callbacks that could execute transaction after onStop()
. It is better to fix the reason instead of trying to walk around the problem with approaches like .commitAllowingStateLoss()
Fragment transactions는 Activity.onStop() 이후에 실행되어서는 안 됩니다! onStop() 이후에 transaction을 실행하는 콜백이 없는지 확인하십시오. .commitAllowingStateLoss()와 같은 방법으로 문제를 해결하기보다 원인을 수정하는 것이 좋습니다.
출처 : https://stackoverflow.com/questions/7575921/illegalstateexception-can-not-perform-this-action-after-onsaveinstancestate-wit
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드에서 인텐트를 사용하여 전화하기 (0) | 2022.12.23 |
---|---|
Android Studio 업그레이드 후 "Default Activity Not Found" 에러 수정하기 (0) | 2022.12.23 |
에뮬레이터에서 SocketException 발생시 해결 방법 (0) | 2022.12.22 |
'This Activity already has an action bar supplied by the window decor' 에러 수정하기 (0) | 2022.12.22 |
카메라 촬영시 FileProvider - IllegalArgumentException 오류 수정하기 (0) | 2022.12.22 |