[Android] Activity Component

안드로이드 앱을 구현할 때에는 컴포넌트 클래스와 일반 클래스를 구현하게 됩니다. 그 중 컴포넌트 클래스는 개발자가 아닌 안드로이드가 생명주기를 관리하는 클래스라고 볼 수 있습니다. 이후에는 4대 컴포넌트라고 일컫는 액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더에 대해 정리해보고자 합니다. 이 글은 먼저 Activity를 정리합니다.

인텐트

컴포넌트를 실행하려고 시스템에 전달하는 메시지

인텐트의 원리와 액티비티의 생명주기를 알아야만 액티비티를 제대로 개발할 수 있습니다. Activity에서 다른 Activity를 실행시키기 위해서는 시스템에 인텐트를 전달해야 합니다. manifest에 등록하면 컴포넌트를 시스템에 알릴 수 있습니다. 이러한 중재 역할은 외부 앱의 컴포넌트와도 해당됩니다.

명시적 인텐트 vs 암시적 인텐트

명시적 인텐트는 클래스 타입 레퍼런스 정보를 이용합니다. 호출 대상을 명확히 알 수 있습니다. 주로 내부 앱을 실행시킬 때 사용되며 특정 Activity를 명시적으로 실행시킵니다.

암시적 인텐트는 실행할 액티비티를 문자열 정보로 나타냅니다. 유저가 호출 대상을 선택합니다. 주로 외부 앱을 실행시킬 때 사용되며 “연결프로그램” - “카카오맵”, “구글 지도”, “네이버 지도” 등을 선택하라는 화면을 예시로 들 수 있습니다.

액티비티 생명주기

생명주기란 생성부터 소멸까지의 과정을 말하며, Activity에서는 상태 변화를 알아차릴 수 있는 콜백함수를 제공합니다.

활성

포커스를 갖는 상태입니다.

onCrate()
onStart()
onResume()

처음 실행된 액티비티는 세 콜백함수가 호출되며 setContentView()함수로 출력한 내용이 비춰집니다.

일시정지

onPause()

한 콜백함수가 호출된 상태이며 포커스를 잃어 사용자 이벤트를 처리할 수 없는 상태입니다. 포커스를 다시 찾는다면 onResume()함수가 호출되고 활성 상태로 바뀝니다.

비활성

종료된건 아니지만 액티비티가 보이지 않는 상태입니다.

onPause()
onStop()

활성에서 비활성 상태가 되면 두 콜백함수가 호출됩니다. 다시 활성상태로 돌아가면

onRestart()
onStart()
onResume()

세 콜백함수가 호출되어 활성 상태가 됩니다.

화면 회전하기

onPause() -> onStop() -> onSaveInstanceState() -> onDestroy() -> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()

완전히 종료된 뒤 다시 생성됩니다.

다이얼로그 띄우기

일반 다이얼로그는 그저 view이기에 생명주기의 변화가 없습니다.

하지만 permission을 요청하는 다이얼로그를 띄울 때에는 onPause()를 호출합니다.

결론

인텐트를 이해해야 액티비티 간 데이터를 다룰 수 있습니다. 또한 생명주기를 고려해야 데이터를 손실없이 보장할 수 있습니다. 단순히 정적인 화면이 아니라면, 인텐트와 생명주기를 이해해야만 액티비티를 활용할 수 있습니다.

References

  • 강성윤. 2021. Do it! 깡샘의 안드로이드 프로그래밍 with 코틀린: 18개 실습 예제로 배우는 모바일 앱 개발. 이지퍼블리싱(주)

Written by@Cha-Ji
Android developer

InstagramGitHub