안드로이드, 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() 와 비슷한 효과라고 볼 수 있는데, 직관적이지 않으므로 위의 방법이 추천된다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] how to disable gridview scrolling. (0) | 2013.09.23 |
---|---|
[Java] Properties class 는 뭐 하는 녀석일까? (0) | 2013.09.21 |
[Java] 언제 ArrayList 써야 하고 언제 LinkedList 를 써야 하나? (0) | 2013.09.20 |
[android] 대체 리소스는 어떤 것을 쓸까? 에 대한 실험 결과 (0) | 2013.09.20 |
[Java] Variable Argument 가변인자!? (0) | 2013.09.19 |
댓글