지금까지 만든 앱에는 한가지 문제가 있다. 기기에서 앱을 실행하고 온보딩 스크린에서 “Continue” 버튼을 눌러 목록으로 진입한 뒤, 기기를 회전하면 다시 온보딩 스크린이 나온다. remember 함수는 Composition 내에서 컴포저블 객체들이 유지될때만 올바르게 동작한다. 화면이 회전 되었을 때는 Activity가 재시작되기 때문에 모든 상태를 다 잃게 된다. 화면 회전 뿐만 아니라 어떠한 환경구성이 변경되던 또는 프로세스가 죽더라도 이러한 일은 발생하기 마련이다.
remember를 사용하는 대신에 rememberSaveable을 사용해보자. 이 함수는 화면회전과 같은 환경구성 변경 및 프로세스의 종료에서도 상태를 보존시킨다.
자 이제 shouldShowOnboarding에서 사용한 remember 함수를 rememberSaveable로 다음과 같이 변경하자.
var shouldShowOnboarding by rememberSaveable { mutableStateOf(true) }
앱을 실행한 뒤 화면을 회전하거나 다크모드로 변경해보자. 앱을 임의로 종료한 뒤 다시 실행 시킨것이 아닌 이상, 온보딩 스크린이 더 이상 나타나지 않는 것을 확인할 수 있다.
지금까지 120줄 안팍의 코드만으로 길고 각각의 아이템이 자신의 상태를 가지면서 성능이 좋은 스크롤형 목록을 나타냈다. 보다시피 추가적인 코드 없이 이 앱은 완벽하게 다크모드에 변경되었다. 테마에 대한 부분도 나중에 다루도록 하자.
0개의 댓글