안드로이드 애플리케이션을 구성하는 기본 요소 4가지를 안드로이드 4대 컴포넌트라고 한다. 이 4가지는 액티비티(Activity), 서비스(Service), 브로드캐스트 수신자(Broadcast Receiver), 콘텐츠 제공자(Content Provider) 이다.
안드로이드 4대 컴포넌트는 AndroidManifest.xml 파일에 그 정보가 보관된다.
액티비티(Activity)
애플리케이션에서 사용자에게 보여지는 화면을 담당하는 컴포넌트이다. 화면뿐만 아니라 화면에서 일어나는 사용자와의 상호작용도 액티비티가 관여한다. 여러 개의 액티비티가 모여서 하나의 애플리케이션을 구성한다. 매니페스트 파일에서 <activity> 태그 형식으로 하나의 액티비티를 표현한다.
서비스(Service)
액티비티가 사용자와의 상호작용에 관여한다면, 서비스(Service)는 사용자가 볼 수 없는 백그라운드에서 작업을 하는 컴포넌트이다. 즉, 사용자가 아무런 상호작용을 하지 않으면서도 작업을 수행하고 싶을 때 필요한 컴포넌트가 서비스이다.
서비스는 백그라운드에서 항상 실행된 상태로 작업을 진행해야 한다. 따라서 서비스는 한 번 실행되면 종료되지 않고 계속 유지된다.
서비스도 하나의 컴포넌트이므로 매니페스트 파일에서 관리되며, <service>태그를 사용한다.
브로드캐스트 수신자(Broadcast Receiver)
브로드캐스트(Broadcast)란, 메시지를 여러 객체에 전달하는 것을 말한다.(1 대 다)
(※유니캐스트(Unicast)는 1 대 1)
안드로이드에서는 브로드캐스팅 메시지를 여러 애플리케이션에 전달할 수 있는데, 이 때 브로드캐스트 수신자를 등록한 앱은 이 메시지를 전달받을 수 있다.
브로드캐스팅 메시지는 여러 종류가 있다. 따라서 브로드캐스트 수신자는 어떤 종류의 메시지를 전달받을 지 결정할 수 있다. 매니페스트 파일에서 브로드캐스트 수신자는 <receiver>태그를 통해 나타내는데, 이 <receiver>태그 안에 <intent-filter>를 통해 전달받을 메시지 종류를 결정한다.
만약, SMS 정보를 받고 싶다면 다음과 같이 매니패스트 파일을 작성할 수 있다.
<receiver>
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
브로드캐스팅 메시지 종류
ACTION_BOOT_COMPLETED
부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한등록 필요)
ACTION_CAMERA_BUTTON
카메라 버튼이 눌렸을 때
ACTION_DATE_CHANGED
ACTION_TIME_CHANGED
폰의 날짜, 시간이 수동으로 변했을때 (설정에서 수정했을때)
ACTION_SCREEN_OFF
ACTION_SCREEN_ON
화면 on, off
ACTION_AIRPLANE_MODE_CHANGED
비행기 모드
ACTION_BATTERY_CHANGED
ACTION_BATTERY_LOW
ACTION_BATTERY_OKAY
배터리 상태변화
ACTION_PACKAGE_ADDED
ACTION_PACKAGE_CHANGED
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_INSTALL
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
ACTION_PACKAGE_RESTARTED
어플 설치/제거
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
충전 관련
ACTION_REBOOT
ACTION_SHUTDOWN
재부팅/종료
ACTION_TIME_TICK
매분마다 수신
android.provider.Telephony.SMS_RECEIVED
sms 수신 (RECEIVE_SMS 권한 필요)
출처: https://itmir.tistory.com/424 [미르의 IT 정복기]
브로드캐스트 수신자도 서비스와 마찬가지로 화면과 별개로 동작한다. 따라서 브로드캐스트 수신자로부터 받은 메시지 정보를 화면에 나타내고 싶다면, 화면에 표시할 액티비티에 인텐트로 전달할 수 있다.
콘텐츠 제공자(Content Provider)
애플리케이션 사이에 데이터 공유가 가능하도록 하는 컴포넌트이다. 내용 제공자를 통해 주소록에 접근하거나, 갤러리에 접근이 가능하다. 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 기타 스토리지 등을 관리 및 제공한다.
콘텐츠 제공자로부터 데이터를 가져오기 위해서는 ContentResolver 객체를 통해 접근이 가능하다. 이 ContentResolver 객체는 getContentResolver() 메서드를 통해 얻을 수 있다. 데이터베이스에서 쿼리를 통해 데이터를 가져오듯, 콘텐츠 제공자가 관리하는 데이터를 가져오기 위해서는 이 ContentResolver 객체의 query() 메서드를 통해 쿼리한다.
'Android' 카테고리의 다른 글
[안드로이드] dp(dip)란 무엇인가? (4) | 2021.04.12 |
---|---|
[Android] Context 란? (0) | 2021.04.08 |
[Android] 안드로이드 생명 주기 (0) | 2021.03.08 |