1. Activity
- 다양한 UI 요소들이 존재할 수 있으며 사용자와의 상호작용을 담당.
- 생명 주기가 존재하며 생명 주기 함수들(onCreate, onStart, onResume, onPause, onStop, onDestroy) 재정의 가능
- ANR 제한시간은 5초
2. Service
- 화면을 가지지 않고 백그라운드에서 동작.
- 액티비티가 종료되더라도 작업을 계속하고 싶을 때 (ex 파일 다운, 음악 재생 등)
- 다른 컴포넌트에 의존하지 않고 독립적으로 작업 수행
- 실행 후 중단 외에 제어가 불가능한 Started Service와 컴포넌트와 bound하여 제어할 수 있는 Bound Service로 나뉨
- 백그라운드에서 동작하지만 기본적으로 메인 스레드에서 실행
- ANR 제한시간은 20초
3. Broadcast Receiver
- 전화 or 배터리 or 네트워크 등 기기 정보에 대한 액션을 취하는 역할
ex) 배터리 부족할 경우 OS에서 Broadcast. 만약 배터리에 관한 수신자를 등록했다면 해당 방송을 받을 수 있음
- 시스템 뿐만 아니라 각종 앱들이 Broadcast할 수 있음
- Manifest에 선언하여 한 번 등록하면 해제가 불가능한 정적 리시버와, 동적으로 등록 및 해제가 가능한 동적 리시버로 나뉨
- 플래그를 통해 동작 제한이 가능함
ex) FLAG_RECEIVER_REGISTERED_ONLY: 동적 리시버만 방송 수신, FLAG_RECEIVER_FOREGROUND: 우선 순위가 높은 Foreground로 Broadcast
- 리시버도 메인 스레드에서 동작함
- ANR 제한시간은 (Foreground Receiver 10초, Background Receiver 60초)
4. Content Provider
- 외부 앱이 각종 데이터를 접근할 수 있게 약속된 인터페이스를 제공 (DB, 파일, 메모리 등)
- 외부에 데이터를 공개할 때만 사용
+) Content Resolver: 외부 앱에서 프로바이더를 사용하기 위한 용도 (Provider에 대한 Client 느낌)