본문 바로가기

프로그래밍/Android

안드로이드 4대 컴포넌트 (Feat. Activity)

 

안드로이드 4대 컴포넌트란?

안드로이드 4대 컴포넌트란 안드로이드 어플리케이션을 구성하는데 필요한 필수적인 4가지 요소를 의미한다.

 

액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(BroadCast Receiver), 콘텐트 프로바이더(Content Provider) 로 구성되고,

 

각 요소는 시스템이나 사용자가 어플리케이션에 진입할 수 있는 진입점이다.

 

또한, 각자의 고유한 수명 주기를 가지고 있고, Activity, Service, BroadCast Receiver는 인텐트(Intent)를 통해 작업을 요청할 수 있다.

 

 

매니패스트 파일에 다음과 같이 <activity> 태그로 선언하여 시스템에 등록하여 사용한다.

 


액티비티(Activity)

액티비티는 사용자와 상호작용하는 진입점이다. 즉, 사용자 인터페이스(UI : User Interface)를 구성하는 컴포넌트이다.

 

각 액티비티는 화면을 구성하고, 사용자와의 상호작용을 처리한다.

 

따라서 어플리케이션의 화면이 전환된다면 이것은 액티비티를 통해 이뤄지는 것이다. 액티비티 간의 전환은 위에서 언급했듯이 인텐트를 통해 발생한다.

 

액티비티의 생명주기는 다음과 같다.

 

onCreate()

액티비티가 생성될 때 호출되고, 모든 액티비티에서 반드시 구현해야하는 메서드이다.

 

액티비티 전체 수명주기 동안 딱 한 번만 호출된다.

 

setOnContentView(int)를 통해 UI를 배치할 수 있는 창을 생성하고, findViewId와 같이 각 view를 정의하는 등의 초기 UI 설정 작업을 수행한다.

 

또한, RecyclerView에 데이터를 바인딩하거나 버튼에 setOnClickListener()를 설정하는 등의 작업을 수행한다.

 

onCreate()의 동작이 끝나면 액티비티가 STARTED 상태에 진입하게 되어, onStart()을 호출한다.

 

onStart()

해당 메서드가 호출되면 액티비티가 화면에 표시되어 사용자에게 보여진다.

 

onStart() 상태에서는 사용자가 앱과 상호작용할 수 없고, 포그라운드 상태는 아니다.

 

onStart()는 매우 빠른 속도로 실행되고, 액티비티가 RESUMED 상태에 진입함과 동시에 onResume()을 호출한다.

 

onResume()

해당 메서드가 호출되면 액티비티가 포커스를 가져 포그라운드에 액티비티가 표시되고, 사용자와 상호작용할 수 있는 상태가 된다.

 

전화가 오거나 화면이 꺼지는 등의 방해 이벤트가 발생하여 사용자의 포커스가 없어지지 않는 이상 앱은 RESUMED 상태에 머무른다.

 

만약 방해 이벤트 발생 후 다시 해당 액티비티로 돌아오면 액티비티가 PUASED에서 RESUMED 상태로 다시 돌아오면서 onResume()을 호출한다.

 

따라서, onResume()에서는 onPause() 중 해제되는 구성 요소를 다시 초기화하는 등의 작업을 수행한다.

 

onPause() 

사용자가 잠시동안 액티비티를 떠났을 때 호출된다. (ex. 카톡 알람이 와서 액티비티 일부를 가리게 되는 상황)

 

액티비티가 포그라운드에서 벗어나게 되고, 아직 완전히 화면에서 사라진건 아니지만 사용자와 상호작용할 수 없다.

 

PAUSED 상태에서는 액티비티가 포그라운드에서 벗어났을 때 실행되면 안되지만 포그라운드로 돌아왔을 때, 다시 재개할 작업을 일시중지하는 작업을 수행한다.

 

onPause()는 매우 짧게 실행되기 때문에 네트워크 호출이나 DB 트랜잭션 등 부하가 큰 작업은 지양해야 한다.

 

액티비티가 재개하면 메모리상 남아있던 액티비티 인스턴스를 다시 불러와 onResume()를 호출하지만, 액티비티가 화면에서 완전히 보이지 않게 되면 onStop()이 호출된다.

 

onStop()

액티비티가 STOPPED 상태에 진입하여 화면에 표시되지 않을 때 호출된다. (ex. 홈버튼을 눌러서 홈화면으로 이동)

 

액티비티가 완전히 사라지는 것은 아니고, 백그라운드에 위치하게 된다.

 

필요하지 않은 리소스를 해제하거나 조정하는 등의 작업을 수행한다.

 

위에서 언급한 CPU를 많이 사용하는 부하가 큰 작업은 onStop()을 호출할 때 수행하면 된다.

 

만약 사용자가 다시 액티비티로 돌아오게 되면 STOPPED 상태에서 다시 시작되어 onRestart() 👉 onStart() 👉 onResume() 이 연달아 호출되고 RESUMED 상태로 변화한다.

 

따라서, onResume()에서 onPause() 중 해제되는 구성 요소를 다시 초기화한 것 처럼 onStart()에서는 onStop() 중 해제되는 구성요소를 다시 초기화하는 작업을 수행한다.

 

주의할 점은 멀티 윈도우 상황에서 다른 앱에 포커스를 두는 경우도 onPause()가 호출되기 때문에 onStop()에서 UI 관련 중지 작업을 수행해야 UI 구성요소가 멈추지 않는다.

 

만약 onPause()에서 UI 관련 중지 작업을 수행하면, 멀티 윈도우 상으로 액티비티가 화면에 표시되고 있지만 UI가 멈춰버리는 상황이 발생한다.

 

onDestroy()

액티비티가 완전히 소멸되기 직전 마지막으로 호출된다.

 

finish()가 호출되거나 사용자가 앱을 종료하는 경우, 화면 회전으로 액티비티가 소멸되는 경우 호출된다. 

 

화면 회전으로 액티비티가 소멸되는 경우 새로운 액티비티 인스턴스가 생성되어 onCreate()를 자동으로 호출한다.

 

메모리 누수를 방지하기 위해 onDestroy()에서 모든 리소스를 해제한다.

 

 

 

 

https://developer.android.com/guide/components/fundamentals?hl=ko

 

애플리케이션 기본 항목  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 애플리케이션 기본 항목 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 앱은 Kotlin, Java 프로그

developer.android.com