Study/Android

안드로이드 4대 컴포넌트(구성요소)

hegunhee 2021. 10. 28. 11:22

안드로이드에는 4가지 중요한 컴포넌트들이 존재합니다.

각각 액티비티(Activity), 서비스(Service), 방송 수신자(BroadCast Receiver), 컨텐츠 제공자(Content Provider)가 있으며

그것들을 이어주는 인텐트(Intent)가 존재합니다.

  • 각 컴포넌트들은 하나의 독립적인 형태로 존재합니다.
  • 각 컴포넌트들은 고유의 기능을 수행합니다.
  • 각 컴포넌트들은 인텐트를 통해 서로 상호작용합니다.

1. 액티비티(Activity)


액티비티는 사용자가 어플리케이션과 상호작용하는 단일 화면을 의미합니다.

모든 안드로이드 어플리케이션은 액티비티로 구성되어있습니다.

사용자와 상호작용을 담당하는 인터페이스라고 할 수 잇습니다.

그래서 안드로이드 애플리케이션은 반드시 하나 이상의 액티비티를 가지고 있습니다.

안드로이드는 생명 주기(Life Cycle)관련 메서드를 재정의해 원하는 기능을 구현합니다.

생명주기에 관한 내용은 추후 액티비티에서 자세히 다루겠습니다.

  • 인텐트를 통해 다른 애플리케이션의 액티비티를 호출할 수 있습니다.
  • 2개 이상의 액티비티를 동시에 표시할 수 없습니다.
  • 1개 이상의 View 또는 ViewGroup을 포함하고있습니다. (Framgent도 가능)
  • 반드시 애플리케이션에는 하나 이상의 액티비티가 있어야합니다.
  • Fragment를 추가하여 화면을 분할할 수 있습니다.
  • Fragment는 process의 진입점이 될 수 없습니다. 애초에 Activity의 하위 종속된 개념입니다.
  • Fragment는 lifeCycle이 있는 ViewGroup정도의 역할입니다.

2. 서비스(Service)


서비스는 사용자와 직접적으로 상호작용하는 요소는 아닙니다.

흔히 백그라운드에서 어떠한 작업을 처리하기 위해 서비스를 사용합니다

Ex) 멜론, 지니, 유튜브 등등 음악 스트리밍을 사용한다던지 파일을 다운로드할때 서비스를 주로 사용합니다.

서비스는 엄연히 메인스레드에서 동작하기 때문에 서비스 내에서 별도의 스레드를 생성하여 작동시켜야합니다.

  • 네트워크와 연동이 가능합니다.
  • 별도의 UI를 가지지 않으며 백그라운드에서 수행합니다.
  • 액티비티와 서비스는 UI 스레드에서 불리는 동일한 애플리케이션 스레드에서 동작합니다.
  • 앱이 중간에 종료되어도 이미 시작이 된 서비스는 백그라운드에서 계속됩니다.

3. 방송 수신자 (BroadCast Receiver)


안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아 핸들링하는 컴포넌트

안드로이드 디바이스의 시스템 부팅시 앱 초기화, 네트워크끊김 등등 특수한 이벤트에대해 처리

배터리 부족 알림, 문자 수신같은 정보를 받아 처리 해야할 필요가 있을때 동작합니다.

"메시지가 왔다" 메시지를 받기 위해 브로드캐스트리시버를 구현하면 되며 해당 정보가 오면 특정 이벤트를 처리할 수 있습니다.

  • 거의 대부분 UI를 가지지 않습니다.
  • 안드로이드 디바이스의 특수한 상황에 대응하기위해 사용됩니다.
  • 특정한 상황을 제외하고는 브로드캐스트 리시버는 시스템에서 시작합니다.

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


컨텐트 제공자는 데이터를 관리하고 다른 앱의 데이터를 제공하는데 사용되는 컴포넌트 입니다.

특정한 어플리케이션이 사용하고있는 데이터베이스를 공유하기 위해 사용되며 앱간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다.

기본적으로 CRUD원칙을 사용합니다

Create (생성)

Read   (읽기)

Update(업데이트)

Delete (삭제)

  • SQLite DB/Web/파일입출력등을 통해 데이터를 관리합니다.
  • 외부 앱이 현재 실행중인 앱의 내에있는 데이터베이스에 접근할때 함부로 접근하지못하게 할 수 있으며 데이터의 공개 범위까지 제한할 수 있습니다.
  • 프로바이더는 데이터의 Read,Write에 대한 퍼미션이 있어야 애플리케이션에 접근 가능합니다.
  • 작은 데이터는 Intent로 교환할 수 있습니다.
  • 데이터베이스에는 흔히 사용되는 CRUD원칙을 준수합니다.

인텐트(Intent)


인텐트란 애플리케이션 컴포넌트 간에 작업 수행을 위해 정보전달을 하는 역할을 하며 통신수단이라 보시면 됩니다.

ex) 액티비티간의 화면 전환, 배민의 사장님께 직접 전화

인텐트는 컴포넌트A가 B를 호출하는데 필요한 정보를 가지고있음

이 정보에는 호출대상이 되는 컴포넌트 B의 이름이 명시적으로 표시됨과 동시에 속성들이 암시적으로 표시되기도 합니다.

  • 서로 독립적으로 동작하는 4가지 컴포넌트들 간의 상호 통신을 위한 장치입니다.
  • 컴포넌트에 액션, 데이터를 전달합니다.
  • 인텐트를 통하여 다른 애플리케이션의 컴포넌트들을 활성화할 수 있습니다.

인텐트는 명시적인텐트와 암시적인텐트로 나뉘며

명시적 인텐트는 호출대상이 정해진경우입니다.

ex) 액티비티 a에서 b로 이동

암시적 인텐트는 이 액션이 가능한것들을 전부 호출합니다.

ex) 인터넷 연결의 경우 인터넷, 크롬, 네이버앱 중에 설정

'Study > Android' 카테고리의 다른 글

서비스 컴포넌트  (0) 2021.12.24
액티비티 생명주기  (0) 2021.12.20
인텐트  (0) 2021.12.19
브로드캐스트 리시버 BroadCast Receiver  (1) 2021.10.30
액티비티의 life cycle  (0) 2021.10.29