Android 앱의 필수 빌딩 블록
각 구성요소(Component)는 시스템이나 사용자가 앱에 진입할 수 있는 진입점(Entry Point)
일부 구성요소는 다른 구성요소에 의존하기도 함
각각의 생명주기와 목적이 있음
사용자 인터페이스가 있는 단일 화면을 나타내는 구성요소
앱이 허용한다면 다른 앱에서 액티비티 시작도 가능
액티비티는 다음과 같이 시스템과 앱의 주요 상호작용을 도움
앱을 백그라운드에서 계속 실행하기 위한 범용 진입점
백그라운드에서 오래 걸리는 작업을 하거나, 원격 프로세스를 위한 작업을 하는 프로세스
사용자 인터페이스를 가지지 않음
작업이 완료될 때까지 계속 실행되도록 시스템에 알림
백그라운드에서 데이터를 동기화하거나, 사용자가 음악 앱을 떠나도 음악을 재생하는 작업에 해당
다른 앱(또는 시스템)이 서비스를 사용하겠다고 요청할 때 실행됨
다른 프로세스에게 API를 제공하며, 시스템은 이들 프로세스 사이에 의존성이 있는 것을 인지함
정규 사용자 플로우 외부에서 발생한 이벤트를 앱에 전달하는 컴포넌트
대부분은 시스템에서 발생하는 이벤트를 불러옴
앱에서 브로드캐스트를 직접 발생시킬수도 있음
사용자 인터페이스를 제공하지 않지만, 알림을 생성해 사용자가 이벤트를 인지할 수 있게 함
일반적으로 다른 컴포넌트로의 게이트웨이 역할을 하며, 최소한의 작업 수행하도록 설계됨
앱 간 상호작용이 많기 때문에 보안에 신경써야 함
파일 시스템, SQLite 데이터베이스, 웹, 또는 앱이 접근할 수 있는 기타 영구 저장소에 저장된 앱 데이터를 관리하는 컴포넌트
이 컴포넌트를 통해 허용한다면 다른 앱이 데이터 쿼리를 하거나, 데이터를 수정할 수도 있음
URI 스킴으로 구분되는 이름이 지정된 데이터를 게시하는 진입점
앱이 어떻게 URI 네임스페이스에 데이터를 매핑할지 정할 수 있고, 그 URI를 다른 엔티티에 전달함으로 데이터를 접근할 수 있도록 함
컨텐츠 제공자를 통해 시스템이 앱을 관리하는 몇 가지 특별한 작업
안드로이드는 다른 시스템과 다르게 main() 함수와 같은 단일 진입접이 아님
앱에서 다른 앱의 구성요소를 직접 접근할 수는 없지만, 안드로이드 시스템은 가능함
시스템에 특정 구성요소가 필요하다는 인텐트(Intent)를 전달하면 시스템이 구성요소를 활성화 해줌
인텐트(Intent)라는 비동기 메시지를 통해 액티비티, 서비스, 브로드캐스트 리시버를 활성화할 수 있음
인텐트는 다른 구성요소에게 동작을 요구하는 메신저 역할을 함으로서 런타임시 개별 구성요소를 서로 연결해줌
인텐트는 Intent 객체로 생성되며, 특정 구성요소(명시적 인텐트) 또는 특정 유형의 구성요소(암시적 인텐트)를 활성화할지 메시지를 정의함
액티비티와 서비스의 경우, 인텐트는 수행할 작업(예: 보기, 전송)을 정의하고, 작업할 데이터의 URI 등 구성요소가 알아야 할 기타 정보를 지정할 수 있음
브로드캐스트 리시버의 경우, 인텐트는 브로드캐스트 알림을 정의함, 예시로 배터리 부족 브로드캐스트는 배터리 부족을 알려주는 액션 스트링만을 함유하고 있음
액션 스트링(Action String) : android.intent.action.AIRPLANE_MODE 와 같이 안드로이드에서 일어날 수 있는 이벤트를 상수로 지정해 놓은 것
컨텐츠 제공자는 다른 구성요소와 다르게 Content Resolver의 요청에 지정될 때 활성화 됨
Content Resolver는 콘텐츠 제공자와의 모든 직접적인 트랜잭션을 처리하며, 컨텐츠 제공자와 트랜잭션을 수행하는 구성요소는 Content Resolver 객체의 메소드를 호출해야 함. 이는 보안상의 이유로 컨텐츠 제공자와 정보를 요청하는 구성요소 사이에 추상화 계층을 둠
액티비티를 시작하려면 인텐트를 startActivity() 메소드로 전달하면 됨, 결과를 받고 싶으면 startActivityForResult() 메소드 사용
Android 5.0(API 레벨 21) 이상에서는 JobScheduler 클래스를 사용해 작업을 예약할 수 있습니다. 이전 버전에서는 Intent를 startService()에 전달하여 서비스를 시작하거나, bindService()에 전달하여 서비스에 바인딩할 수 있습니다.
브로드캐스트 리시버를 활성화하려면 Intent를 sendBroadcast() 또는 sendOrderedBroadcast() 등의 메서드에 전달해 브로드캐스트를 보낼 수 있음
콘텐츠 제공자에 쿼리를 수행하려면, ContentResolver의 query() 메서드를 호출
원문
https://developer.android.com/guide/components/fundamentals