kotlin의 활동 수명 주기 단계는 위와 같이 나누어져 있습니다.
App을 맨 처음 시작 할때에 onCreate가 실행 되어서 수명 주기가 시작됩니다.
그 위의 Started 와 Resumed 는 실제적으로 app 이 사용될 때에 들어가는 state 입니다.
이때 onStart 는 앱이 화면에 표시되지만 상호작용은 할 수 없는 상태이고,
onResume은 앱이 화면에 표시되고, 상호작용까지 가능한 상태입니다.
onResume의 상태에서 뒤로가기나 홈 버튼을 눌러서 app 이 내려가게 되면, onPause, onStop이 차례로 호출되는데,
onPause는 앱의 포커스가 없어지고, onStop의 경우는 실행 이후에 app이 보이지 않습니다.
화면에 다시 돌아가게 되면 onRestart가 호출되고, onStart, onResume이 호출된다.
따라서 onResume이 실행되면 포커스를 다시 얻습니다.
그런데 화면에 보이는 것과 포커스를 얻는것을 나누어 놓은 이유는 무엇일까 ?
예를 들어 공유 버튼 등으로 아래와 같은 화면이 보여진다. 이때에, 뒤쪽의 화면은 보여지지만, 포커스는 없기 때문에 통제할 수는 없다.
이때에 외부를 입력한다면, 다시 onResume을 호출해서 뒤쪽의 화면의 포커스를 얻습니다.
onDestory가 호출될때는 화면 전환, 따라서 애뮬레이터가 회전 할때에, onPause, onStop, onDestroy가 호출되고, 다시 onCreate, onStart, onResume이 다시 호출된다.
따라서 이때에는 destroy되고, 다시 create 되기 때문에 데이터가 손실됩니다. 이는 기본값으로 다시 시작된다는 의미입니다.
따라서 값을 잃지 않기 위해서는 compose가 추적해야 합니다. 이때에 State, MutableState를 활용해서 상태를 추적합니다.
이때 State는 읽기만이 가능하고, MutableState는 변경과 읽기 쓰기가 가능합니다.
하지만, state만을 사용하면 트리거는 가능하지만, 값을 유지하는 것은 불가능합니다.
따라서 값을 유지하기위해서는 remember를 사용해서 값을 유지해야 합니다.
하지만, remeber는 구성변경중에는 값을 유지하지 못합니다.
따라서 이때에는 remeberSaveable을 사용하여 저장합니다.
따라서 앱이 회전하면서 구성이 바뀔때에는 유지하기 위해서 remeberSaveable을 활용합니다.
'android-kotlin' 카테고리의 다른 글
Kotlin StateFlow (1) | 2023.08.31 |
---|---|
kotlin 배열 선언 (0) | 2023.08.28 |
kotlin 싱글톤 객체 생성 (0) | 2023.08.26 |
Kotlin layout 써보기 (0) | 2023.08.26 |
kotlin 변수 type (0) | 2023.08.22 |