본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

by 돼지왕 왕돼지 2013. 9. 21.
반응형


 안드로이드, Caused by : java.lang.IllegalStateException : 

  Can not perform this action after onSaveInstanceState

 


[android] Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState


이 Exception 은 Fragment Transaction 의 commit() 함수에서 발생하는데,

해당 exception 이 자주 발생하는 상황은 보통 Activity 가 종료하는 타이밍에 Fragment Transaction 으로 Fragment 를 remove 하는 commit 을 하면 그렇다.

말 그대로 onSaveInstanceState() 가 실행된 이후에 commit() 이 되면 상태정보가 날아가기 때문에 경고차원에서 Exception 을 던지는 것으로 보이는데, 사실 경고를 보여주지 않고 exception 을 던지는 것은 조금 가혹해 보인다.


여튼 해결을 해야겠지, 해결해보자.



commitAllowingStateLoss()


문제가 되는 것은 onSaveInstanceState() 가 불린 후이기 때문에 state 를 보장할 수 없는 것이라는 이야기인데, commit() 대신 commitAllowingStateLoss() 로 state 손실을 각오하고 commit 을 시켜버리면 exception 이 발생하는 것을 막을 수 있다.








onSaveInstanceState()


구글링을 하던 중에 onSaveInstanceState() 를 override 하면서 super 를 불러주지 않으면 문제가 되지 않는다는 이야기도 있다. 잘 생각해보면 이것은 commitAllowingStateLoss() 와 비슷한 효과라고 볼 수 있는데, 직관적이지 않으므로 위의 방법이 추천된다.







반응형

댓글