HS_development_log

Android - Component 본문

Android

Android - Component

DevHyeonseong 2020. 5. 24. 17:45
반응형

Component

 

안드로이드 4대 컴포넌트

  • 하나의 독립적인 형태로 존재합니다.

  • Intent를 통해서 상호작용합니다.

  • 각 Component들은 각자 고유의 기능을 수행합니다.

 

 

1. Activity

Activity는 사용자에게 제공되는 UI가 있는 화면입니다. 한마디로 애플리케이션과 사용자가 상호작용 하는 화면을 의미합니다.

 

  • 모든 Activity의 클래스가 AndroidManifest.xml에 해당하는 <activity> 선언을 가지고 있어야 합니다.

  • 애플리케이션에는 반드시 1개 이상의 Activity가 있어야 합니다.

  • 2개의 Activity를 동시에 Display 할 수 없습니다.

  • Intent를 통하여 다른 Activity와 상호작용 할 수 있습니다.

  • Activity내에서는 Fragment를 통하여 화면을 분할할 수 있습니다.

  • Activity는 UI Thread라는 동일한 Application Thread로 실행됩니다.

  • Activity는 stack에서 관리됩니다.

 

 

2. Service

Service는 사용자와 상호작용하지 않습니다. UI도 없습니다.

백그라운드, 포그라운드, 바인드에서 실행되는 프로세스입니다.

Service는 UI Thread라는 동일한 Application Thread로 실행됩니다.

※ Service는 자신의 호스팅 프로세스의 기본 스레드에서 실행됩니다. 자신의 스레드를 직접 생성하지 않으며, 별도의 프로세스에서 실행되지도 않습니다. 따라서 서비스 내에서 별도의 스레드를 생성하여 작업하는 것이 좋습니다.

 

2-1 Foreground Service

  • 사용자에게 보이는 작업을 수행합니다.

  • 알림을 표시해야 합니다.

  • 사용자가 앱과 상호작용하지 않을 때도 계속 실행됩니다.

  • 리소스가 부족해도 임의로 중단되지 않습니다.

2-2 Background Service

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

  • 시스템이 리소스가 부족할 경우 임의로 중단할 수 있습니다.

현재 API 26 이상부터 백그라운드 서비스 실행에 대한 제한이 적용되어 안정적으로 사용하기 어렵습니다.

안드로이드 개발자 문서 : https://developer.android.com/about/versions/oreo/background?hl=ko

2-3 Bound Service

  • 바인딩된 서비스는 클라이언트 <-> 서버와 같이 동작하며, 서비스가 서버 역할을 수행합니다.

  • 일종의 서비스 클래스 구현으로, 이를 통해 다른 애플리케이션이 이 서비스에 바인딩하여 상호작용 할 수 있습니다.

  • startService()로 시작한 경우 : 서비스를 바인딩한 뒤, 실제로 실행하면 시스템은 클라이언트가 모두 바인딩을 해제해도 서비스를 소멸시키지 않습니다. 따라서 서비스를 직접 중단해야 합니다.

  • 그 외 : 모든 클라이언트가 서비스에서 바인딩을 해제하면 시스템은 서비스를 소멸시킵니다.

 

 

3. Broadcast Receiver

안드로이드 내부적으로 발생하는 각종 이벤트와 Data를 받아와 핸들링하는 컴포넌트입니다.

안드로이드 디바이스의 시스템 부팅 시 앱 초기화, 네트워크 끊김 등 특수한 이벤트에 대한 처리나 배터리 부족 알림, 문자 수신과 같은 정보를 받아 처리를 해야 할 필요가 있을 때 동작합니다.

 

안드로이드 OS에서 모든 앱에 정보를 방송하는 역할을 합니다.

Broadcast Receiver를 구현하면 메시지를 받을 수 있습니다.

 

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

 

 

4. Content Provider

content provider는 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는 데 사용되는 컴포넌트입니다.

특정 애플리케이션이 사용하는 DB를 공유하기 위해 사용됩니다.

애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공합니다.

 

  • SQLite DB/ WEB / 파일 입출력 등을 통해서 데이터를 관리합니다.
  • 외부 애플리케이션으로부터 자신의 DB를 접근 제한, 공유를 하고 싶은 데이터만 공유할 수 있습니다.
  • 작은 데이터는 Intent로 애플리케이션끼리 데이터 공유가 가능하지만, content provider는 음악, 사진처럼 용량이 큰 데이터를 공유하는데 적합합니다.
  • DB의 CREATE, READ, UPDATE, DELETE (CRUD) 원칙을 준수합니다.
반응형

'Android' 카테고리의 다른 글

Android - View , ViewGroup  (0) 2020.07.17
Android - Thread  (0) 2020.07.17
Android - Activity Lifecycle  (0) 2020.06.29
Android - Fragment  (0) 2020.06.29
Android - Context  (0) 2020.05.24