생명 주기 콜백의 이해

고성욱·2023년 3월 22일
0

안드로이드

목록 보기
21/26
  • 액티비티는 인스턴스 생성과 동시에 생성과 관련된 생명 주기 메서드가 순차적으로 호출됩니다.
  • 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 속성을 이용하여 액티비티가 속한 태스크의 관리를 세부적으로 조정할 수 있습니다.

태스크 관리를 잘 이용하면 앱의 사용자 경험을 개선할 수 있습니다.

profile
안드로이드, 파이썬 개발자

0개의 댓글