onRestoreInstanceState is Never called! 죽어도 안불리는 이유!

상상코딩·2022년 3월 15일
0
post-thumbnail

onSaveInstanceState, onRestoreInstatnceState 호출 도식도

이 그림을 보고 onSavedInstanceState와 onRestoreInstanceState가 불리는것을 테스트해보려고 앱에 코드를 넣어보았다.

액티비티A -> 액티비티B -> B finish()

onSaved는 열심히 타는데, onRestore는 안 탄다.. 저 도식도는 거짓말일까...?

그래서 onRestoreInstanceState가 안불렸던 이유는?

저 도식도는 맞다. 그러나 내가 테스트 했던 방법이 틀렸다. SavedInstace의 의미를 몰랐던 것.

savedInstance는 액티비티가 프로그래머의 호출이 아니라, 시스템에 의해 뿌서졌다가 다시 그려질때 데이터를 보존하기 위해 사용하는 것이다.

따라서 onStart() 이후 무조건 불리는 것이 아니다. 다 부서졌다 다시 그려질 때 사용하는 것이므로, onCreate부터(처음부터) 다시 타는 경우에만 해당할 수 밖에! (그래서 onCreate에 파라미터로 savedInstace가 넘어오는 것!)

+) 추가로, onRestoreInstanceState()는 유의미한 savedInstance가 있을때만 불린다!

결론 : 시스템에 의해 부서졌다가 다시 그려지는 경우 중 유의미한 savedInstace가 있을 때만 onRestoreInstanceState가 호출된다.




유용한 추가 지식

onReStart()를 탔다 : 응용 프로그램 스택 자체에 의해 유지되므로 복원할 필요가 없다.





시스템에 의해 뿌서졌다가 다시 그려질때가 언제냐면,,!!

  1. 메모리 부족으로 인해 액티비티가 다 부서졌다가 onCreate부터 다시 그려지는 경우.
  2. 화면 회전하는 경우.
  3. 다크모드/라이트모드 변경하는 경우





onRestart는 또 뭐지..

이 도식도에서 보다시피, onStop()에서 다시 onStart()가 호출되기 전에 불리는 생명주기!

ref. https://vaert.tistory.com/161

profile
히히낙낙

0개의 댓글