괜히 마케팅/기획 찍먹하다가 부랴부랴 개발로 돌려서 개고생 하는 사람~~~
안드는 신투 면접 때 물어봤는데 제대로 대답 못했다는^^^^^
이번에는 확실하게 외워둘 것!
1. onCreate() : 생성됨
시스템이 먼저 활동을 생성할 때 실행되는 것으로, 필수적으로 구현해야 한다.
활동이 생성되면 생성됨 상태가 된다. 활동의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행한다.
@OnLifecycleEvent라는 주석이 있는 메서드가 호출되고, 수명 주기 인식 구성요소는 생성됨 상태에 필요한 모든 설정 코드를 실행할 수 있게 된다.
활동은 생성됨 상태에 머무르지 않는다.
-> onCreate() 메서드가 실행을 완료하면 시작됨 상태가 되고, 시스템이 연달아 Start()와 onResume() 메서드를 호출한다.
2. onStart() : 시작됨
활동이 시작됨 상태에 들어가면 시스템은 이 콜백을 호출한다. 호출되면 활동이 사용자에게 표시되고, 앱은 활동을 포그라운드에 보내 상호작용할 수 있도록 준비한다.
매우 빠르게 완료되고, 생성됨 상태와 마찬가지로 활동은 시작된 상태에 머무르지 않는다.
-> 콜백이 완료되면 활동이 재개됨 상태에 들어가고, 시스템이 onResume() 메서드를 호출한다.
서비스는 기본적으로 백그라운드 서비스와 포그라운드 서비스로 나누게 된다.
화면에 보여지냐, 보이지 않느냐의 차이라고 이해해 두기!
서비스? 앱이 UI 없이 백그라운드에서 특정 시간 동안 실행되는 것을 의미한다.
3. onResume() - 재개됨
활동이 재개됨 상태에 들어가면 포그라운드에 표시되고 시스템이 onResume() 콜백을 호출한다.
이 상태에 들어갔을 때 앱이 사용자와 상호작용한다. 즉, 어떤 이벤트가 발생해서 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무른다.
활동이 재개됨 상태로 전환되면 이 활동의 수명 주기와 연결된 모든 수명 주기 인식 구성요소는 ON_RESUME 이벤트를 수신한다. 이 상태에서 수명 주기 구성요소가 포그라운드에서 사용자에게 보이는 동안 실행해야 하는 모든 기능을 활성화할 수 있다.
방해되는 이벤트가 발생하면 활동은 일시중지됨 생타에 들어가고, onPause() 콜백을 호출한다.
활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출한다. 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 활동이 재개됨 상태로 전환될 때마다 필요한 다른 초기화 작업도 수행해야 한다.
4. onPause() : 일시중지됨
시스템은 사용자가 활동을 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출한다. 그러나 이 활동이 항상 소멸되는 것은 아니고, 활동이 포그라운드에 있지 않게 되었다는 것을 나타낸다.
onPause() 메서드를 사용하여 Activity가 일시중지됨 상태일 때 계속 실행(또는 적절히 계속 실행)되어서는 안 되지만 잠시 후 다시 시작할 작업을 일시중지하거나 조정한다.
이 상태에 들어가는 이유
- onResume() 섹션에서 설명하였듯이, 일부 이벤트가 앱 실행을 방해해서
- Android 7.0(API 수준 24) 이상에서는 여러 앱이 멀티 윈도 모드에서 실행되는데, 언제든지 그중 하나의 앱(창)만 포커스를 가질 수 있기 때문에 시스템이 그 외에 모든 다른 앱을 일시중지시킨다.
- 새로운 반투명 활동(예: 대화상자)이 열려서. 활동이 여전히 부분적으로 보이지만 포커스 상태가 아닌 경우에는 일시중지됨 상태로 유지된다.
활동이 일시중지됨 상태로 전환하면 이 활동의 수명 주기와 연결된 모든 수명 주기 인식 구성요소는 ON_PAUSE 이벤트를 수신하는데, 여기에서 수명 주기 구성요소는 구성요소가 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있다.
또한 onPause() 메서드를 사용하여 배터리 수명에 영향을 미칠 수 있는 모든 리소스를 해제할 수도 있다.
그러나 앞서 onResume() 섹션에서 언급했듯이 일시중지된 활동은 멀티 윈도우 모드에서 여전히 완전히 보이는 상태일 수 있기 때문에 멀티 윈도우 모드를 더욱 잘 지원하기 위해 UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때는 onPause() 대신 onStop()을 사용하는 것이 좋다.
onPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족하므로 onPause()를 사용하여 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행해서는 안 된다. 이러한 작업은 메서드 실행이 끝나기 전에 완료되지 못할 수도 있다.
-> 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 한다.
onPause() 메서드의 실행이 완료되더라도 활동이 일시중지됨 상태로 남아 있을 수 있다.
오히려 활동은 다시 시작되거나 사용자에게 완전히 보이지 않게 될 때까지 이 상태에 머무른다. 활동이 다시 시작되면 시스템은 다시 한번 onResume() 콜백을 호출한다. 활동이 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템은 Activity 인스턴스를 메모리에 남겨두고, 시스템이 onResume()을 호출할 때 인스턴스를 다시 호출한다. 최상위 상태가 재개됨 상태인 콜백 메서드 중에 생성된 구성요소는 다시 초기화할 필요가 없다.
활동이 완전히 보이지 않게 되면 시스템은 onStop()을 호출한다.
5. onStop() : 중단됨
활동이 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고, 시스템은 onStop() 콜백을 호출한다. 시스템은 활동의 실행이 완료되어 종료될 시점에 onStop()을 호출할 수도 있다.
활동이 중단됨 상태로 전환하면 이 활동의 수명 주기와 연결된 모든 수명 주기 인식 구성요소는 ON_STOP 이벤트를 수신하고, 여기에서 수명 주기 구성요소는 구성요소가 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있다.
앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 한다.
또한 CPU를 비교적 많이 소모하는 종료 작업을 실행해야 한다.
활동은 정지됨 상태에서 다시 시작되어 사용자와 상호작용하거나, 실행을 종료하고 사라집니다. 활동이 다시 시작되면 시스템은 onRestart()를 호출한다. Activity가 실행을 종료하면 시스템은 onDestroy()를 호출한다.
6. onDestroy(): 소멸
활동이 소멸되기 전에 호출된다. 호출하는 경우
- (사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어) 활동이 종료되는 경우
- 구성 변경(예: 기기 회전 또는 멀티 윈도 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우
활동이 소멸됨 상태로 전환하면 이 활동의 수명 주기와 연결된 모든 수명 주기 인식 구성요소는 ON_DESTROY 이벤트를 수신한다. 여기서 수명 주기 구성요소는 활동이 소멸되기 전에 필요한 것을 정리할 수 있다.
활동이 종료되는 경우 onDestroy()는 활동이 수신하는 마지막 수명 주기 콜백이 된다. 구성 변경으로 인해 onDestroy()가 호출되는 경우 시스템이 즉시 새 활동 인스턴스를 생성한 다음, 새로운 구성에서 그 새로운 인스턴스에 관해 onCreate()를 호출한다.
onDestroy() 콜백은 이전의 콜백에서 아직 해제되지 않은 모든 리소스(예: onStop())를 해제해야 한다.
요약 :
onCreate() 생성 -> onStart() 시작 -> onResume() 재개 -> onPause() 일시 중지 -> 1. onStop() 중단-> onDestory() 소멸 / 2. onResume() 재개로 돌아감
출처 :
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko#kotlin
'Application > Android Studio' 카테고리의 다른 글
[언어] Java VS Kotlin (0) | 2023.11.22 |
---|---|
[안드로이드 활동 수명 주기] #2. Fragment (0) | 2023.11.22 |
[Xml] 오른쪽 정렬하기 (0) | 2023.07.18 |
댓글