Beeeam

Android 4대 컴포넌트 본문

Android

Android 4대 컴포넌트

Beamjun 2023. 1. 27. 16:12

안드로이드 4개 컴포넌트는 안드로이드 앱을 구성하는데 있어서 필수적인 4개의 구성요소를 의미한다. 4대 컴포넌트에는Activity, Service, Broadcast receiver, Content provider 가 있다. 이 중에서 가장 많이 사용되는 요소는 Activity이다. 각 컴포넌트는 독립적인 형태로 존재하고, 각 컴포넌트들은 Intent 통해서 상호작용한다.

 

모든 컴포넌트는 앱에 추가할 때 Manifest 파일에 선언해야 한다. 여기서 Manifest 파일은 앱을 파악하기 위한 설계도 같은 역할을 하는 파일이다. 그리고 모든 컴포넌트는 Main Thread (UI 작업을 처리해주는 Thread)안에서 실행된다.

 

Activity

  • 보여지는 화면에서 동작하는 기능들을 담당한다. UI를 제공하여 사용자와 상호작용을 가능하게 한다. 앱에서는 적어도 하나의 activity가 필요한데 activity가 없으면 사용자와 상호작용을 못하기 때문이다. 그리고 한 번에 두 개의 activity를 보여줄 수는 없다. (Fragment를 활용하면 화면을 분할해서 보여줄 수는 있다.)
  • activity는 하나 이상의 View 또는 ViewGroup을 가지고 있어야 한다. 여기서 View는 화면에서 우리 눈에 보이는 것이고 ViewGroup은 말 그대로 View가 모여있는 것이다.
  • View → ex) Button, Image, TextView
  • ViewGroup → ex) layout
  • Activity는 UI를 담당하는 xml 파일과 기능을 담당하는 소스 파일(java or Kotlin)이 있다. 하나의 xml 파일에 하나의 소스 파일이 연결되어 하나의 화면을 이룬다.
  • 가장 많이 사용되는 컴포넌트이다.

 

Service

  • activity가 종료 되어 있는 상태에서도 동작하기 위해 만들어진 컴포넌트로 백그라운드에서 실행되는 작업을 실행한다. 만약 서비스가 실행되고 있는 상태라면 안드로이드 OS에서는 해당 프로세스를 죽이지 않도록 막고 이를 관리한다. UI를 제공하지 않는다. 사용자가 다른 application으로 전환하여도 백그라운드에서 계속 실행된다. 이외에도 컴포넌트를 서비스에 바인딩 하여 서비스와 상호작용할 수 있으며 프로세스간 통신도 수행 가능하다.
  • ex) 한 서비스는 네트워크 트랜잭션을 처리하고, 음악을 재생하고 파일 I/O을 수행하거나 content provider와 상호작용할 수 있으며 이 모든 것을 백그라운드에서 수행할 수 있다.

포그라운드 서비스

  • 사용자에게 잘 보이는 작업을 수행한다. 포그라운드 서비스는 상태 표시줄에 알림을 보여준다. 사용자가 앱과 상호작용을 하지 않을 때도 계속 실행된다.
  • startForeground() 함수를 호출하여 포그라운드 서비스를 요청한다.
  • ex) 오디오 앱: 재생 중인 노래를 상태 표시줄에 표시하고 이 알림을 통해서 사용자와 상호작용을 할 수 있는 activity를 실행할 수 있게 한다.

백그라운드 서비스

  • 사용자에게 직접 보이지 않는 작업을 수행한다.

바인드 서비스

  • startService() 대신 bindService() 메소드를 통해 시작되는 서비스를 서비스 바인딩이라고 한다. 바인딩 서비스는 컴포넌트가 클라이언트, 서비스가 서버 역할을 한다. 컴포넌트가 Service에 어떤 요청을 하고(클라이언트) Service는 이 결과를 반환할 수 있다.(서버)
  • 바인드 서비스는 Activity / Fragment 와 서비스간에 데이터를 주고 받을 수 있고, 프로세스 간 통신에도 사용된다. 그래서 activity와 값을 주고 받을 필요가 있을 때 사용하고, 값을 주고 받기 위한 인터페이스를 제공한다.
  • 서비스 바인딩은 연결된 Activity가 사라지면 바인딩 된 서비스도 소멸 된다. 그리고 하나의 서비스에 여러 개의 activity를 연결 가능하다(1 : N). 이렇게 다수의 컴포넌트와 연결된 바인딩 서비스는 모든 컴포넌트가 종료되면 같이 종료된다.

 

Broadcast Receiver

  • 안드로이드 os로부터 발생하는 이벤트 정보를 받고 대응한다. 안드로이드 앱 하나에서 동작 하는게 아니라 시스템 전체에서 동작한다. 대부분 UI를 가지지 않으며 수신기를 통해서 기기의 상황을 감시하다가 이벤트가 발생하면 해당 이벤트에 맞게 정의해둔 작업들을 수행하는 역할을 한다.
  • ex) 화면 on/off, 배터리 부족, 기기 충전 …

Broadcast receiver 수신

  1. Manifest에 선언하기 : 어떤 이벤트에 대해서 알림을 받을 것인지 Manifest에 정의해주면 된다.
  2. context에 등록하기 : context가 사용할 수 있을 때까지만 유효하다. 만약 Activity의 context에 등록했다면 onDestroy()될 때 까지 유효하고, 앱에 등록하였다면 앱이 종료될 때까지 유효하다.

 

Content Provider

  • 앱들은 각자의 DB를 가지는데 이 DB는 해당 앱만 접근할 수 있다. 그런데 다른 앱에서 다른 앱의 DB를 접근해야 하는 경우가 생길 수 있다. 이런 경우를 처리할 때 content provider가 사용된다.
  • 데이터를 제공하는 역할을 하며 앱 끼리 데이터를 공유하는 유일한 방법이다. 각종 설정 값이나 DB에 접근하게 해준다.

외부 앱의 DB 정보가 필요한 경우 외부 앱은 content resolver를 통해서 uri를 해당 앱에 보내고, 해당 앱의 content provider가 uri를 해석하여 필요한 DB 작업을 하게된다.
content provider와 content resolver를 통해서 앱 간의 DB를 공유하면서 직접적인 접근은 막을 수 있다.