🎉Acitivity Life Cycle
사용자가 앱에서 하는 다양한 동작을 통해 앱의 Activity는 다양한 액티비티 생명주기의 상태 변화를 취합니다. 이번 장에선 사용자의 동작에 따른 액티비티와 프래그먼트의 생명 주기 패러다임에 대해 설명하고 각 생명주기에 따른 콜백 함수에 대해 다뤄보겠습니다.
생명 주기를 쉽게 설명하자면 실제 화면에 표시되는 유무를 생각하면 편합니다. 먼저 최초로 앱을 실행하면 onCreate()가 호출되는데 이 때 초기화 관련한 작업을 하면 좋습니다. 그 다음엔 onStart()가 호출되는데 이 시점부터 사용자가 화면을 볼 수 있습니다. 그리고 onResume()이 호출되면 이 때 부터 사용자와 액티비티가 상호작용을 하고 각종 이벤트를 발생시킬 수 있습니다.
액티비티가 포커스를 잃은 상태가 되면 onPause()가 호출됩니다. onStop()은 액티비티가 완전히 보이지 않을 때 호출되고 액티비티가 종료되거나 앱 프로세스 자체가 종료되면 onDestroy()가 호출됩니다. 또한 불투명한 새로운 액티비티가 최상단으로 올라와 기존 액티비티가 완전히 포커스를 잃고 보이지 않게 되면 onPause()에 이어 onStop() 까지 바로 호출됩니다.
- 활성 : 액티비티 화면이 출력되고 있으며 사용자가 이벤트를 발생시킬 수 있는 상태입니다. 처음 실행된 액티비티는 onCreate() -> onStart() -> onResume() 함수까지 호출됩니다.
- 일시 정지 : 화면이 출력되고 있지만 사용자가 이벤트를 발생시킬 수 없는 상태로 onPause()까지 호출된 상태입니다. 일시 정지 상태의 액티비티가 다시 포커스를 얻어 사용자 이벤트를 처리할 수 있으면 onResume() 함수가 호출됩니다.
- 비활성 : 액티비티가 종료되지 않고 화면에만 보이지 않는 상태입니다. 예를 들어 홈 버튼을 눌러 홈 화면으로 이동하면 onPause() -> onStop() 함수까지 호출되며 다시 액티비티를 활성화 시 onRestart() -> onStart() -> onResume() 함수가 호출됩니다.
- 최종적으로 액티비티가 종료된다는 것은 onDestroy() 함수까지 호출되었단 의미입니다.
🎉onCreate()
액티비티를 활성화 할 때 가장 먼저 실행되는 메소드로 전체 생명 주기 동안 한 번만 발생해야 하는 기본 어플리케이션 로직을 실행합니다. 데이터를 바인딩하고 viewModel을 연결하는 등의 작업을 수행합니다.
이 메소드는 savedInstanceState 를 수신합니다. 예를 들어 화면을 회전했다고 가정했을 때 액티비티가 종료되었다 다시 생성되면 다음과 같은 생명주기를 걸칩니다.
onCreate() -> onStart() -> onResume()으로 화면이 활성화된 상황에서
onPause() -> onStop() -> onSaveInstanceState() -> onDestroy() 까지 실행
이 때 액티비티의 모든 데이터는 사라지고 아래 과정을 거쳐 액티비티가 출력됩니다.
onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()
액티비티를 종료할 때 저장했다 복원해야 할 데이터가 있다면 Bundle 이라는 객체에 담아 주면 됩니다. onCreate(), onSaveInstanceState(), onRestoreInstanceState() 함수는 Bundle 객체를 매개변수로 가지고 이 번들 객체를 통해 데이터를 저장하고 복원할 수 있습니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
// 번들에 저장된 데이터 가져오기
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val data1 = savedInstanceState.getString("data1")
val data2 = savedInstanceState.getString("data2")
}
// 번들에 데이터 저장
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
outState.putString("data", "hello")
outState.putString("data2", "hello2")
}
'Android' 카테고리의 다른 글
Android LayoutInflater (1) | 2023.12.26 |
---|---|
Android Fragment Life Cycle (0) | 2023.12.26 |
Android Platform Architecture (0) | 2023.12.25 |
Android Main Thread (2) | 2023.12.23 |
Anroid REST API 연동기 [GET] (3) | 2023.12.22 |