- 액티비티는 인스턴스 생성과 동시에 생성과 관련된 생명 주기 메서드가 순차적으로 호출됩니다.
- finish() 메서드나 뒤로가기로 액티비티를 종료하면 소멸과 관련된 생명주기 메서드가 순차적으로 호출됩니다.
액티비티 생명 주기
- onCreate(): 액티비티가 생성될 때 호출됩니다. 여기서 액티비티 초기화를 수행합니다.
- onStart(): 액티비티가 사용자에게 보여지기 전에 호출됩니다.
- onResume(): 액티비티가 포그라운드에 위치하고 있을 때 호출됩니다. 이 시점에서 애니메이션 및 오디오 재생과 같은 리소스를 할당하는 것이 좋습니다.
- onPause(): 액티비티가 일시 중지되었을 때 호출됩니다. 포그라운드에 위치하지 않지만 화면에 여전히 보이는 경우도 있습니다.
- onStop(): 액티비티가 더 이상 사용자에게 표시되지 않을 때 호출됩니다.
- onDestroy(): 액티비티가 소멸될 때 호출됩니다. 리소스 해제 및 전체적인 정리를 수행합니다.
프레그먼트 생명 주기
- onAttach(): 프래그먼트가 액티비티에 붙을 때 호출됩니다.
- onCreate(): 프래그먼트가 생성될 때 호출됩니다. 여기서 초기화를 수행합니다.
- onCreateView(): 뷰를 생성하고 반환합니다. 여기서 UI 구성 요소를 초기화합니다.
- onActivityCreated(): 액티비티에서 프래그먼트의 onCreate() 메서드 호출이 완료된 후에 호출됩니다.
- onStart(): 프래그먼트가 사용자에게 보여지기 전에 호출됩니다.
- onResume(): 프래그먼트가 포그라운드에 위치하고 있을 때 호출됩니다. 이 시점에서 애니메이션 및 오디오 재생과 같은 리소스를 할당하는 것이 좋습니다.
- onPause(): 프래그먼트가 일시 중지되었을 때 호출됩니다. 포그라운드에 위치하지 않지만 화면에 여전히 보이는 경우도 있습니다.
- onStop(): 프래그먼트가 더 이상 사용자에게 표시되지 않을 때 호출됩니다.
- onDestroyView(): 프래그먼트의 UI가 제거됩니다. 여기서 뷰와 관련된 리소스를 해제합니다.
- onDestroy(): 프래그먼트가 소멸될 때 호출됩니다. 리소스 해제 및 전체적인 정리를 수행합니다.
- onDetach(): 프래그먼트가 액티비티에서 분리될 때 호출됩니다.
액티비티 백스택
- 백스택은 액티비티 또는 화면 컴포넌트를 담는 안드로이드의 저장 공간입니다.
- 새로운 액티비티가 시작되면 이전 액티비티는 백스택에 저장됩니다. 이전 액티비티는 사용자가 뒤로가기 버튼을 누르거나 finish() 메서드를 호출하여 종료될 수 있습니다. 사용자가 뒤로가기 버튼을 누르면 백스택에서 가장 최근에 저장된 액티비티가 화면에 표시됩니다. 이것은 액티비티를 백그라운드에서 실행하고 다시 포그라운드로 가져오는 데 사용됩니다.

태스크와 프로세스
- 태스크(Task)는 어플에서 실행되는 프로세스를 관리하는 작업 단위입니다.
- 안드로이드에서 태스크는 다른 프로세스의 액티비티를 담을 수 있습니다.
- 안드로이드는 서로 다른 어플리케이션의 액티비티를 공유 할 수 있는데 카메라와 갤러리 액티비티를 예로 들수 있습니다. 카메라 기능을 간단한 코드로 호출해서 사용하명 실제로능 카메라 앱의 독자적인 프로세스가 실행되고 카메라 액티비티 또한 카메라 앱의 프로세스에 의해 처리됩니다.
- 인텐트를 통해 카메라앱에 전달하는 코드를 구현하면 다음과 같습니다.
fun openCamera() {
val intent - Intent(MediaStore.ACTION_IMAGE_CAPTURE)
activityResult.launch(intent)
}
- 카메라를 사용하기 위한 인텐트를 시스템으로 전달하면 카메라 액티비티가 다른 앱이 있기 때문에 프로세스를 새로 생성합니다. → 호출된 카메라 액티비티가 새로운 프로세스를 통해 동작하지만 하나의 작업 단위인 태스크로 묶입니다. 결국 하나의 앱처럼 동일한 태스크로 묶이고 백스택에 쌓이게 됩니다.

- 같은 태스크의 백스택에 쌓이기 때문에 뒤로가기 버튼을 누르면 같은 앱의 액티비티 처럼 백스택에서 제거되고 , 홈버튼을 누르면 마치 하나의 태스크 전체가 백그라운드로 이동합니다.
액티비티 태스크 관리하기
액티비티 태스크는 두 가지 방법으로 관리할 수 있습니다. 먼저는 매니패스트의 설정으로 관리하는 방법입니다.
태그 안의 속성으로 사용할 수 있습니다.
⇒
- launchMode: 액티비티의 launchMode 속성을 이용하여 태스크 관리를 할 수 있습니다. launchMode에는
standard
, singleTop
, singleTask
, singleInstance
가 있으며, 각각 다른 태스크 관리 방식을 가집니다.
- Intent Flag: Intent Flag를 이용하여 태스크 관리를 할 수 있습니다.
FLAG_ACTIVITY_NEW_TASK
, FLAG_ACTIVITY_CLEAR_TOP
, FLAG_ACTIVITY_SINGLE_TOP
등이 있으며, 각각 다른 태스크 관리 방식을 가집니다.
- TaskAffinity: TaskAffinity 속성을 이용하여 액티비티가 속할 태스크를 지정할 수 있습니다. TaskAffinity 속성을 이용하여 액티비티가 속한 태스크의 관리를 세부적으로 조정할 수 있습니다.
태스크 관리를 잘 이용하면 앱의 사용자 경험을 개선할 수 있습니다.