Android 주요(4대) 컴포넌트(구성요소).
앱과 상호작용 할 수 있는 4개의 창구라고 생각하면 된다.
Activities, Services, Broadcast Receivers, Content providers 4개의 컴포넌트들을 통해 앱을 사용할 수 있다.
Activities
사용자와 상호작용하기 위해 사용. 사용자와 상호작용을 위해 화면이 필요하다. 화면이 들어가기때문에 가장 많이 사용되고 필수적인 Component.
1개의 화면에서는 1개의 Activity가 있다. 2개 이상의 Activity를 동시에 실행할 수 없다. 즉, 사용자가 보는 화면에서는 1개의 Activity만 존재한다.
1개의 App에서 여러개의 Activity가 있을 수 있다.
각각의 Activity는 독립적이며, Activity간의 상호작용을 위해서는 Intent를 사용한다.
Activity들은 독립적이므로, 개발자가 진입점으로 허용한 모든 Activity가 진입점이 될수 있다. 예를 들면 갤러리에서 사진을 선택하고 공유하기 버튼을 누르면, 여러앱들이 노출된다. 그중에 하나를 선택하면, 다른 App의 Activity를 실행할 수 있다.
Services
백그라운드에서 동작하기 위해 사용. 백그라운드에서 동작하므로, 화면이 없다.
대표적으로 음악 듣기, 파일 다운로드가 있다. 이를 생각하면 특징을 쉽게 이해할 수 있다.
네트워크 통신이 가능하다.
앱을 종료해도 시작된 서비스는 계속 실행된다. 시작된 서비스는 작업이 종료될 때까지 계속 작업하라고 시스템에 지시한다.
Thread와는 개념이 다르다. Service는 UI Thread에서 동작하게 된다.
BroadCast Receivers
특정 이벤트가 발생했을때, 이를 처리하기 위해 사용. 개발자는 시스템이나 다른 App에서 특정 이벤트가 발생했을때, 이를 처리해야 한다면 BroadCast Receiver를 사용해서 처리가 가능하다.
주로 시스템에서 보내는 경우가 많다. 문자메시지 도착, 화면캡쳐, 배터리 부족등이 있다.
상단 상태표시줄에 해당 이벤트가 발생되었다고 알려주는 경우가 많다.
사용자의 입력이외에 이벤트를 받아서 처리가능하다. 예를 들면, 인증문자번호 자동입력등이 있다. 사용자가 입력하지 않아도, 이벤트(문자메시지 도착)를 전달 받아 인증번호 입력창에 자동으로 입력한다.
Content Providers
다른 App에 데이터를 제공하는데 사용.
사진, 연락처등 다른 App의 데이터가 필요할경우 이를 요청하여 사용.
보안을 위해서 사용. 각각의 App이 DB를 가질수 있다. 안드로이드에서는 App이 자신의 DB에만 접근이 가능하도록 되어있어, 다른 App에서 데이터가 필요한경우, Content Provider를 통해 공유가 가능하다.
Intent
Android에서는 어떤 앱이든 다른 앱의 일부를 사용할 수 있게 되어있다. 예를 들면 사진 촬영이 필요하다면, 내가 사진촬영하는 기능을 직접 구현하는게 아니라, 다른 사진 촬영기능이 있는 App을 사용하면 된다. 촬영이 끝나면, 다시 내 App으로 돌아올 수 있다. 이게 가능하기 위해서는 위의 컴포넌트들(Content Provider 제외)과 이를 이어주기 위한 Intent가 필요하다.
Intent란 Component를 시작하게 만드는 메시지이다.
특정 Component를 실행할지(명시적 Intent), 아니면 해당 작업이 가능한 모든 Component를 확인하여 실행할지(암시적 Intent) 선택이 가능하다.
URI에 정보를 포함하여 전달 가능하다.