Jetpack Compose - Activity lifecycle, remember, rememberSaveable

2024. 2. 1. 16:09IT/Android

728x90

<미리 보기>

 

 

<소스 코드>

https://github.com/SeongHyunJeon/android-kotlin-practice/tree/143220ce01350232f547de99b72cd8edc743a2c5/DessertClicker

 

 

<정리>

onCreate - 운영체제가 메모리에 액티비티를 생성할 때 호출된다. 따라서 이 함수 내부에 setContent를 사용하여 레이아웃을 지정하면 액티비티의 생성과 동시에 레이아웃이 지정된다.

 

onStart - 앱이 onCreate를 호출한 직후에 호출되어 액티비티가 화면에 출력되지만, 아직 앱을 통한 상호작용은 불가능하다.

 

onResume - 앱이 포그라운드에 위치될 때 호출된다.

*포그라운드는 앱이 화면에 출력되고 유저가 온전히 앱을 사용하는 시기를 말한다.

 

onPause - 앱이 화면을 출력하고 있지만 포커스를 잃어 상호작용이 불가능할 때 호출되는데, 대표적으로 공유 버튼이 있다.

 

onStop - 앱이 더 이상 화면에 출력되지 않을 때 호출되는데, 아직 백그라운드에 위치하고 있어 언제든 이어서 실행이 가능하다.

 

onRestart - 앱이 백그라운드에 위치하고 있는 상태에서 포그라운드로 전환될 때 호출된다.

 

onDestroy - 운영체제가 앱에 할당한 리소스를 반환할 때 호출되는데, 코드에서 finish()를 호출하거나 구성 변경으로 인해 액티비티를 다시 생성할 때 발생할 수 있다.

*구성 변경은 기기의 상태나 설정이 변경되어 액티비티를 다시 생성하는 프로세스를 의미하는데, 대표적으로 언어 변경, 텍스트 크기 변경, 화면 회전 모드가 있다.

 

(Mutable)State - 해당 타입으로 선언된 객체는 상태를 추적할 수 있어, 값이 변경되면 리컴포지션이 실행된다.

 

remember - 해당 타입으로 선언된 객체는 리컴포지션이 실행되어도 값을 유지하고 재사용할 수 있다.

 

rememberSaveable - 해당 타입으로 선언된 객체는 리컴포지션 뿐만 아니라 구성 변경에도 값을 유지할 수 있다.

 

<의문점>

메인 액티비티에서 onCreate를 오버라이드 할 때, 부모 클래스 Activity의 onCreate를 호출하는 이유는 무엇일까요?

= 부모 클래스 Activity의 onCreate를 비롯한 다른 Lifecycle 메서드들은 액티비티의 상태를 관리하고 시스템 리소스를 할당하는 등의 중요한 작업을 수행하기 때문에 안정적인 앱 동작을 보장하기 위해선 호출되어야 한다.

 

State는 이미 불변으로 값이 변경되지 않는데 굳이 추적할 필요가 있을까요?

= 참조하고 있는 객체 상태를 변경할 순 없지만, 새로운 객체를 생성하여 참조하는 객체를 변경할 수 있으므로 추적이 필요하다.

728x90