[Android] Activity Lifecycle
개발자의 의도대로, 그리고 User가 예상하는대로 앱이 동작되도록 하기 위해서는 Activity lifecycle 에 대한 이해는 필수라고 할 수 있습니다.
Activity lifecycle 변화를 알 수 있는 콜백들이 있으며, system이 해당 콜백 메소드들을 호출합니다.
1. onCreate()
-
액티비티 최초 생성 시 1회 호출
-
반드시 구현이 필요하며,
setContentView()
를 호출하여 layout을 정의함
2. onStart()
-
User에게 화면에 보이기 직전에 호출
-
매우 빠르게 완료되며, 바로
onResume()
을 호출
3. onRestart()
- 중단(onStop())되었다가 다시 시작(onStart()) 되기 직전에 호출
4. onResume()
-
User에게 화면이 보여질 때 호출
-
User와 상호작용할 수 있는 상태이며, focus가 떠날 때 까지 이상태에 머물게 된다.
5. onPause()
- Activity 가 User에게 완전히 보이지 않게 되기 직전까지 이 상태에 머물게 된다.
-
onPause()
는 아주 잠깐 실행되는 콜백 함수이므로 시간이 오래 걸리는 작업을 하면 안된다. (network, DB 작업 등)- 부하가 큰 종료 작업은
onStop()
에서 수행하자.
- 부하가 큰 종료 작업은
-
멀티윈도우 모드가 실행될 때, 불투명 Activity 가 최상단에 띄워질 때 (화면에는 일부 보이지만, focus 상태는 아닌 경우) 등의 경우에 호출될 수 있다.
onPause()
에서는 화면이 보일 수 있는 상태이므로, UI 리소스 해지 작업은onStop()
에서 수행하자.
6. onStop()
-
액티비티가 User에게 완전히 보여지지 않을 때 호출
-
다른 Activity가 포그라운드 전체를 차지하거나 앱이 백그라운드로 내려가서 Activity가 더이상 User에게 보이지 않을 때 호출된다.
- 백그라운드로 내려갔지만 focus 만 잃은 상태일 경우엔
Paused
.
- 백그라운드로 내려갔지만 focus 만 잃은 상태일 경우엔
-
CPU를 비교적 많이 소모하는 종료 작업(network, DB 작업 등), UI 해지 작업(애니메이션 일시중지 등)을
onStop()
에서 실행하자. -
onRestart()
또는onDestroy()
를 호출
7. onDetrosy()
-
Activiy가 소멸되기 전에 호출
-
finish() 호출, Configuration 변경(기기회전,, 멀티윈도우 모드)
-
` isFinishing()` onPause(), onDestroy()에서 액티비티가 단순 중지 또는 구성이 변경 된건지 진짜 종료(finish)된건지 확인할 수 있다.
Activity 의 생명주기에 따른 로직을 아래와 같이 Activity 콜백에 직접 구현할 수도 있지만,
class MainActivity : AppCompatActivity() {
// ...
override fun onResume() { }
}
수명주기 인식 컴포넌트 를 별도로 구현하면, 여러 Activity에서 재사용이 가능한 장점이 있다. 따라서, 앱 전반에 재사용이 필요한 경우라면 수명주기 인식 컴포넌트 사용을 고려해보세요.
class MyLifecycleObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() { }
}
-
ON_START 이후에 초기화 -> ON_STOP 이후에 해제 ON_RESUME 이후에 초기화 -> ON_PAUSE 이후에 해제
-
참고: https://developer.android.com/guide/components/activities/activity-lifecycle
Leave a comment