4대 컴포넌트
앱 구성 요소는 Android 앱의 필수적인 기본 구성 요소이다. 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점이다.
안드로이드 4대 컴포넌트로는 액티비티, 서비스, 방송 수신자(BroadCast Receiver), 콘텐츠 제공자(Content Provider)가 있습니다. 이는 안드로이드 주요 구성 요소이며, 이들 간의 통신은 인텐트(Intent)를 이용합니다.
1. 액티비티(Activity)
- 액티비티는 사용자와 상호작용하기 위한 진입점
- 사용자 인터페이스를 포함한 화면을 나타냄
- 액티비티는 다음과 같이 시스템과 앱의 주요 상호작용을 돕습니다.
- 예를 들어 이메일 앱이라면 새 이메일 목록을 표시하는 액티비티가 하나, 이메일을 작성하는 액티비티가 하나, 이메일을 읽는 데 쓰는 액티비티가 하나 등이 존재
- 이메일 앱에서 허용할 경우 다른 앱이 이런 액티비티 중 하나를 시작 가능
2. 서비스(service)
- 여러 가지 이유로 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점
- 백그라운드에서 실행되는 구성 요소로, 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행
- 사용자 인터페이스를 제공하지 않음
- 사용자가 다른 앱에 있는 동안에 백그라운드에서 음악을 재생하거나, 사용자와 액티비티 간의 상호작용을 차단하지 않고 네트워크를 통해 데이터를 가져올 수 있음
- 백그라운드에서 일부 데이터를 동기화하거나 사용자가 앱에서 나간 후에도 음악을 재생하는 등의 서비스를 예로 들 수 있습니다.
3. 방송 수신자(BroadCast Receiver)
- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 컴포넌트
- 앱이 시스템 전체의 브로드캐스트 알림에 응답할 수 있게 합니다.
- 대다수의 브로드캐스트는 시스템에서 발생합니다.
- 현재 실행되지 않은 앱에도 시스템이 브로드캐스트를 전달할 수 있습니다.
- 대표적인 예: 화면 꺼짐, 배터리 부족, 사진 캡처 알림 등
- 앱도 브로드캐스트를 사용하여 사용자 인터페이스를 표시하지 않지만, 상태 표시줄 알림 생성으로 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있음
4. 콘텐츠 제공자(Content Provider)
- 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리
- 다른 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 콘텐츠 제공자가 허용할 경우에는 수정도 가능
- 예를 들어 Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공하여 적절한 권한을 가진 앱이라면 콘텐츠 제공자(예: ContactsContract.Data)를 쿼리하여 특정한 인물에 대한 정보를 읽고 쓸 수 있습니다.
intent
Intent는 메시징 객체로, 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있다.
1. 사용사례
-
액티비티 시작
- Activity는 앱 안의 단일 화면을 나타냄
- Activity의 새 인스턴스를 시작하려면 Intent를 startActivity()로 전달하면 됩니다. Intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담습니다.
- 액티비티가 완료되었을 때 결과를 수신하려면, startActivityForResult()를 호출
- 액티비티는 해당 결과를 이 액티비티의 onActivityResult() 콜백에서 별도의 Intent 객체로 수신
-
서비스 시작
- Service는 사용자 인터페이스 없이 백그라운드에서 작업을 수행하는 구성 요소입니다.
- Android 5.0(API 레벨 21) 이상부터는 JobScheduler로 서비스를 시작할 수 있습니다.
- 서비스를 시작하여 일회성 작업을 수행하도록 하려면(예: 파일 다운로드) Intent를 startService()에 전달
- 다른 구성 요소로부터 서비스에 바인딩하려면 Intent를 bindService()에 전달
- 브로드캐스트 전달
- 브로드캐스트는 모든 앱이 수신할 수 있는 메시지
- Intent를 sendBroadcast() 또는 sendOrderedBroadcast()에 전달하면 다른 앱에 브로드캐스트를 전달할 수 있습니다.
2. 인텐트 유형
- 명시적 인텐트
명시적 인텐트는 일반적으로 앱 안에서 구성 요소를 시작할 때 사용한다.
- 암시적 인텐트
암시적 인텐트는 작업을 지정하여 기기에서 해당 작업을 수행할 수 있는 모든 앱을 호출할 수 있도록 한다. 사용자가 어떤 앱을 사용할지 선택하기를 원할 경우에 암시적 인텐트가 유용하다.
참고:
https://developer.android.com/guide/components/fundamentals?hl=ko
https://angangmoddi.tistory.com/240
https://developer.android.com/guide/components/intents-filters?hl=ko#Types