July 11, 2022
안드로이드 앱을 구현할 때에는 컴포넌트 클래스와 일반 클래스를 구현하게 됩니다. 그 중 컴포넌트 클래스는 개발자가 아닌 안드로이드가 생명주기를 관리하는 클래스라고 볼 수 있습니다. 이후에는 4대 컴포넌트라고 일컫는 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더에 대해 정리해보고자 합니다. 이 글은 먼저 Activity를 정리합니다.
컴포넌트를 실행하려고 시스템에 전달하는 메시지
인텐트의 원리와 액티비티의 생명주기를 알아야만 액티비티를 제대로 개발할 수 있습니다.
Activity
에서 다른 Activity
를 실행시키기 위해서는 시스템에 인텐트를 전달해야 합니다. manifest
에 등록하면 컴포넌트를 시스템에 알릴 수 있습니다.
이러한 중재 역할은 외부 앱의 컴포넌트와도 해당됩니다.
명시적 인텐트는 클래스 타입 레퍼런스 정보를 이용합니다. 호출 대상을 명확히 알 수 있습니다. 주로 내부 앱을 실행시킬 때 사용되며 특정 Activity를 명시적으로 실행시킵니다.
암시적 인텐트는 실행할 액티비티를 문자열 정보로 나타냅니다. 유저가 호출 대상을 선택합니다. 주로 외부 앱을 실행시킬 때 사용되며 “연결프로그램” - “카카오맵”, “구글 지도”, “네이버 지도” 등을 선택하라는 화면을 예시로 들 수 있습니다.
생명주기란 생성부터 소멸까지의 과정을 말하며, Activity에서는 상태 변화를 알아차릴 수 있는 콜백함수를 제공합니다.
포커스를 갖는 상태입니다.
onCrate()
onStart()
onResume()
처음 실행된 액티비티는 세 콜백함수가 호출되며 setContentView()
함수로 출력한 내용이 비춰집니다.
onPause()
한 콜백함수가 호출된 상태이며 포커스를 잃어 사용자 이벤트를 처리할 수 없는 상태입니다.
포커스를 다시 찾는다면 onResume()
함수가 호출되고 활성 상태로 바뀝니다.
종료된건 아니지만 액티비티가 보이지 않는 상태입니다.
onPause()
onStop()
활성에서 비활성 상태가 되면 두 콜백함수가 호출됩니다. 다시 활성상태로 돌아가면
onRestart()
onStart()
onResume()
세 콜백함수가 호출되어 활성 상태가 됩니다.
onPause() -> onStop() -> onSaveInstanceState() -> onDestroy() -> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()
완전히 종료된 뒤 다시 생성됩니다.
일반 다이얼로그는 그저 view이기에 생명주기의 변화가 없습니다.
하지만 permission을 요청하는 다이얼로그를 띄울 때에는 onPause()를 호출합니다.
인텐트를 이해해야 액티비티 간 데이터를 다룰 수 있습니다. 또한 생명주기를 고려해야 데이터를 손실없이 보장할 수 있습니다. 단순히 정적인 화면이 아니라면, 인텐트와 생명주기를 이해해야만 액티비티를 활용할 수 있습니다.