안드로이드의 4대 컴포넌트
안드로이드 앱은 액티비티, 서비스, 컨텐츠 제공자(Content Provider), Broadcast Receiver 와 같은 4대 컴포넌트로 이루어진다.
컴포넌트란 앱의 구성 단위로 컴포넌트가 조합되어 하나의 앱을 구성한다.
각 컴포넌트는 하나의 독립된 형태로 존재하며 정해진 역할을 수행한다.
Service
- 안드로이드에서 서비스란 백그라운드에서의 작업을 위한 애플리케이션 구성 요소이다.
- Activity는 사용자에게 직접 보이는 반면 Service는 사용자에게 보이지 않는 백그라운드에서 작업을 수행한다.
- 예를들어 음악을 재생하거나, 파일입출력을 수행하거나, 네트워크 연결 등을 처리할 수 있다.
- 서비스 호출방법에는 startService, bindService가 존재한다.
Start, bind service 차이
- startservice는 해당 서비스를 호출한 주체가 누구냐에 상관없이 해당 서비스를 실행하기만 하는 방법이다. 액티비티에서 startservice를 실행한 경우, 액티비티와 서비스는 서로 정보를 주고받지 않는다.
- bindservice는 마치 클라이언트- 서버와 같은 역할을 하며 서비스가 서버역할을 한다. 액티비티는 서비스에 어떠한 요청을 할 수 있고 서비스로 부터 요청 결과를 받을 수 있다.
- 연결된 액티비티가 사라지면 서비스도 소멸되며 하나의 서비스에 다수의 액티비티를 연결할 수 있다.
IntentService
- 인텐트서비스는 서비스를 실행 시 별도의 WorkThread를 생성하여 서비스 작업을 수행한다. 따라서 비동기식으로 동작할 수 있으며 기존의 onStartCommand가 아닌 onHandleIntent에 기능을 구현하며 onHandleIntent내의 모든 동작이 수행되면 정지한다. 하지만 Android 8.0에 적용된 백그라운드 실행 제한 정책으로 인하여 deprecated 되었다. 이를 대체하기 위해 JobIntentService가 등장했다.
JobIntentSerivce
- IntentService는 응용 프로그램이 종료되면 함께 종료되며 내부의 데이터는 사라져버린다. 하지만 JobIntentService는 응용 프로그램이 종료되더라도 실행을 다시 시작하여 작업을 계속 진행할 수 있다. 예를들어 현재 서비스가 사진 업로드를 진행중에 앱이 종료되면 인텐트서비스는 저장되지 않지만, JobIntentService는 해당 정보를 가지고 재시작하여 저장한다.
- 제한시간이 10분으로 지정되어 있으며 시간이 넘어갈 경우 강제종료 된다.
- 하지만 JobIntentService또한 deprecated되었다.안드로이드에서 이것 대신 안드로이드 JetPack을 사용할 것을 권고하기 때문이다.
WorkManager
- 대부분의 서비스로 할 수 있는 것들은 WorkManager로 대체되었다. Jetpack의 구성요소 중 하나이다.(추후에 추가)
BroadCast Receiver
- 방송 수신자로 문자, 전화와 같은 요청을 받으면 요청을 인식하여 방송해주는 안드로이드 컴포넌트이다. sendBroadcast 메소드를 통해 방송을 보낼 수 있으며 BroadcastReceiver객체가 방송을 수신한다.
- 안드로이드 개발자 사이트에 여러 표준브로스캐스트에 대한 정의가 있으며 이를 적절히 활용해 안드로이드 생명주기에 맞게 receiver등록과 send를 맞추어 설정하면 된다.
ContentProvider
- 앱 내부의 데이터베이스나 파일을 외부로 공개하는 역할을 한다. 카카오톡이 전화번호를 가져와서 친구추가를 자동으로 해주는 역할을 컨텐츠 프로바이더가 진행한다.