안드로이드 4대 컴포넌트

  • Activity (액티비티)
  • Service (서비스)
  • BroadCast Receiver (방송 수신자)
  • Content Provider (콘텐트 제공자)

각 컴포넌트는 하나의 독립적인 형태로 존재한다.
각 컴포넌트는 정해진 기능을 수행한다.
각 컴포넌트는 인텐트를 사용하여 상호작용을 한다.



1. 액티비티 (Activity)

UI 화면을 담당하는 컴포넌트
사용자와 상호작용을 하기 위한 진입점이다.

애플리케이션을 실행시키면 액티비티가 뜨면서 사용자에게 보여지게 된다.

  • 안드로이드 애플리케이션은 반드시 하나의 액티비티를 가지고 있어야 한다.
    ‣ 애플리케이션을 실행했을 때 하나의 액티비티는 무조건 실행된다. (두번째 그림)
  • 액티비티는 하나 이상의 View를 가질 수 있다.
    ‣ 버튼, 텍스트뷰, 이미지뷰 등
  • 각 액티비티는 매니페스트 파일에 등록되어 있어야 한다.
    ‣ 매니페스트 파일에 등록되어 있지 않은 액티비티는 시스템에서 표시되지 않는다.

❗ 두번째 화면에서 세번째 화면으로 넘어갈 때 인텐트를 사용하여 상호작용 한다.



2. 서비스 (Service)

UI없이 백그라운드에서 실행되는 컴포넌트

위 화면과 같이 애플리케이션 실행 중 갑자기 남자친구에게 전화가 온다.
전화를 받아 화면이 통화 화면으로 전환된다.
그럼 실행되던 애플리케이션은 종료되었을까?

한번 시작된 서비스는 애플리케이션이 종료되고, 다른 애플리케이션으로 이동해도 계속 백그라운드에서 실행된다.
따라서 서비스를 통해 종료되지 않고 계속해서 백그라운드에서 실행된다.

  • UI없이 백그라운드에서 실행되는 컴포넌트
    ‣ UI가 없기 때문에 사용자에게 보여지지 않는 뒷 공간에서 실행된다.
  • 한번 시작된 서비스는 애플리케이션이 종료되고, 다른 애플리케이션으로 이동해도 계속 백그라운드에서 실행된다.
  • 모든 서비스는 Service클래스를 상속받아서 작성된다.
    ‣ StartService, BindService
  • 네트워크를 통하여 데이터를 받아올 수 있다.
  • 오랫동안 실행되는 작업 또는 원격 프로세스를 위한 작업을 할 때 사용한다.


3. 방송 수신자 (BroadCast Receiver)

안드로이드 os로부터 발생하는 다양한 이벤트 정보를 받고 반응하는 컴포넌트

방송은 여러 사람에게 송신하고 필요한 사람만 수신한다.
이러한 방송에 귀기울이고 있는 수신자가 BroadCast Receiver이다.

음악을 듣던 도중 이어폰 연결이 해제되면 실행되고 있는 음악을 일시정지 시켜야 한다.
이를 BroadCast Receiver을 통해, 이어폰 연결이 해제되었다는 정보를 수신하고 서비스를 종료해야한다.

  • 안드로이드 os로부터 발생하는 다양한 이벤트 정보를 받고 반응하는 컴포넌트
    ‣ 화면 on/off, 리부팅, 배터리 부족 등 단말기에서 발생하는 이벤트
  • 대부분 UI가 없다.
    ‣ 위 예시처럼 이어폰 연결이 해제되었다는 정보를 수신하는 것은 UI가 없다.
  • 수신기를 통해 상황을 감지하고 적절한 작업을 수행한다.
    ‣ 위 예시처럼 상황을 감지하고, 음악을 일시정지 시키는 적절한 작업을 수행한다.


4. 콘텐트 제공자 (Content Provider)

어플리케이션 사이에서 데이터를 주고받을 수 있게 도와주는 컴포넌트

전화번호 변경 어플리케이션은 콘텐츠 제공자에 의해 전화번호부 데이터를 제공받았다.
따라서 전화번호 변경 어플리케이션을 통해 데이터를 수정하면,
기존 사용자의 전화번호부 데이터를 변경할 수 있다.
위 예시에서는 엄마 → 마미로 변경

  • 어플리케이션 사이에서 데이터를 주고받으며 관리한다.
    ‣ 내장된 SQLite DB, 파일 데이터, Web의 데이터를 관리한다.
  • 다른 어플리케이션의 데이터를 쿼리하거나 변경이 가능하다.
  • 외부 어플리케이션이 접근하지 못하게 하거나, 사용자가 원하는 특정 데이터만 공유할 수도 있다.

인텐트 (Intent)

애플리케이션 컴포넌트 간의 상호작용을 위한 통신수단
컴포넌트에 액션, 데이터 등을 전달한다.


명시적 인텐트와 암시적 인텐트로 구분된다.

  • 명시적 인텐트
    ‣ 호출할 대상 컴포넌트가 확실히 정해져 있는 경우

다운로드함에서 문서파일을 열려고 한다.
문서를 실행하면 문서읽기 앱이라는 정해진 곳에서만 수행된다.


  • 암시적 인텐트
    ‣ 호출할 대상 컴포넌트각 확실히 정해져 있지 않고, 특정 데이터에 대해 수행할 액션을 지정한다.

선택된 사진을 공유할 때 공유될 수 있는 앱이 확실히 정해져 있지 않아 앱을 선택할 수 있도록 액션이 나타난다.

profile
🌈 Mobile Application Developer

1개의 댓글

comment-user-thumbnail
2021년 9월 26일

설명 깔끔하게 잘하셨네요. 칭찬합니다.

답글 달기