1. 안드로이드 4대 구성요소란?
안드로이드의 주요 4대 컴포넌트는 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(Broadcast Resceiver), 콘텐트 프로바이더(Content Provider)를 말합니다. 각 컴포넌트들은 하나의 독립된 형태로 존재하며, 정해진 역할을 수행합니다.
또한 각 컴포넌트들은 인텐트(Intet)라는 일종의 메시지 객체를 사용하여 상호 통신을 합니다. 이들 중에서 가장 많이 사용하는 것은 액티비티(Activity)지만, 나머지 컴포넌트도 매우 중요하므로 어떤 기능을 하는지 알아둬야합니다.
2. 액티비티
액티비티는 ui 화면을 담당하는 컴포넌트로, 용자가 애플리케이션과 상호작용하는 단일화면을 의미하며 모든 안드로이드 애플리케이션은 액티비티로 구성되어 있습니다.
즉, 사용자와 상호작용을 담당하는 인터페이스라고 할 수 있습니다.
그래서 안드로이드 애플리케이션은 반드시 하나 이상의 액티비티를 포함하고 있으며
액티비티는 생명주기(Life Cycle) 관련 메서드들을 재정의하여 원하는 기능들을 구현할 수 있습니다.
예를 들어 이메일 앱으로 가정을 들어본다면, 이메일 목록을 표시하는 액티비티가 하나 있고, 이메일을 작성하는 액티비티, 그리고 이메일을 읽는데 쓰는 엑티비티가 존재할 수 있습니다.
여러 액티비티가 함께 작동하여 해당 이메일 앱에서 짜임새 있는 사용자 환경을 형성하지만, 각자 서로 독립적인 형태로 이루어져 있습니다. 따라서 한번에 두개의 액티비티를 동시에 띄울 수 없고, 단일 화면만 가능합니다. 하지만 3.0 버전 이후로 추가된 프래그먼트로 화면을 분할 할 수 있도록 지원하고 있습니다.
또한, 액티비티는 Activity의 서브클래스로 구현되며, 일반적으로 하위호환을 위해 AppCompatActivity의 서브클래스를 사용합니다.
액티비티의 생명주기
요약
◆ 인텐트(Intent)를 통해 다른 애플리케이션의 액티비티를 호출할 수 있습니다.
◆ 2개 이상의 액티비티를 동시에 Display 할 수 없습니다.
◆ 1개 이상의 View 또는 ViewGroup을 포함합니다.
◆ 반드시 애플리케이션에는 하나 이상의 액티비티가 있어야 합니다.
◆ 액티비티 내에 프래그먼트(Fragment)를 추가하여 화면을 분할시킬 수 있습니다.
ex) 프래그먼트에 대하여.
프레그먼트는 안드로이드 초창기에는 없던 개념이며, 그당시에는 4대 컴포넌트 만으로도 문제가 없었습니다.
하지만 안드로이드 생태계가 넓어지고 모바일 환경이 크게 변하면서 한 화면 내에서 많은 정보를 표현 하려다보니 화면 분할 및 Activity 들끼리 그 분할된 컨텐츠를 재사용하기 위해 추가된 요소입니다.
일종의 앱 프로세스의 엔트리 포인트가 된다는 점에서 주요 컴포넌트로 Activity, Service, BroadCast Receiver, Content Provider가 맞지만 그에비해 Fragment는 process의 진입점이 될수없고, 애초에 Fragment가 말씀하신대로 Activity의 하위 종속된 개념이라 단순히 lifecycle이 있는 ViewGroup 정도의 역할로 보는게 좋습니다.
3. 서비스
서비스는 백그라운드에서 실행되는 구성 요소로, 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행하는 것입니다.
흔히 백가라운드에서 어떠한 작업을 처리하기 위해 서비스를 이용하기 때문에, 서비스는 사용자 인터페이스를 제공하지 않습니다. 예를 들어 서비스는 사용자가 다른 앱에 있는 동안에 백그라운드에서 음악을 재생할 수도 있고, 아니면 사용자와 액티비티 사이의 상호작용을 차단하지 않고 네트워크를 가로질러 데이터를 가져올 수도 있습니다. 또 다른 구성 요소(예: 액티비티)가 서비스를 시작한 다음 실행되도록 두거나 자신에게 바인드하여 상호작용하도록 할 수도 있습니다.
서비스의 생명 주기
주의) 서비스 같은 경우 사용자의 인터페이스(UI, 화면)를 방해하지 않고 눈에 보이지 않는 곳에서 작업을 처리하기 때문에 별도의 스레드(Thread)에서 동작다고 오해하는 경우가 많습니다.
but! 서비스는 엄현히 메인스레드에서 동작하기 때문에 서비스 내에서 별도의 스레드를 생성하여 작업을 처리해야 합니다!
서비스 요약)
◆ 네트워크(Network)와 연동이 가능합니다.
◆ 별도의 UI를 가지지 않으며 백그라운드에서 수행됩니다.
◆ 액티비티와 서비스는 UI스레드라고 불리는 동일한 애플리케이션 스레드로 실행됩니다.
◆ 애플리케이션이 종료되어도 이미 시작이 된 서비스(Service)는 백그라운드(Background)에서 계속 동작합니다.
4. 브로드캐스트 수신기(Broadcast Receiver)
브로드캐스트 수신기는 시스템 범위의 브로드캐스트 알림에 응답하는 구성 요소를 말합니다. 대다수의 브로드캐스트는 시스템에서 시작합니다. 예를 들어, 화면이 꺼졌다거나 배터리 잔량이 부족하다거나, 사진을 캡처했다는 것을 알리는 브로드캐스트가 있습니다. 앱도 브로드캐스트를 시작합니다. 예를 들어, 기기에 몇 가지 데이터를 다운로드하여 다른 앱도 사용할 수 있다는 사실을 다른 여러 앱에게 알리는 것입니다. 브로드캐스트 수신기는 사용자 인터페이스를 표시하지 않지만, 상태 표시줄 알림을 생성하여 사용자에게 브로드캐스트 이벤트가 발생했다고 알릴 수 있습니다. 다만 브로드캐스트 수신기는 그저 다른 구성 요소로의 “게이트웨이”인 경우가 더 보편적이고, 극소량의 작업만 수행하도록 만들어진 경우가 많습니다. 예컨대 서비스를 시작하여 이벤트를 근거로 한 어떤 작업을 수행하도록 할 수 있습니다.
5. 콘텐츠 프로바이더(Contents Provider)
콘텐츠 제공자는 공유된 앱 데이터 집합을 관리합니다. 데이터는 파일 시스템이나 SQLite 데이터베이스 또는 웹이나 기타 영구적인 저장소 위치 중 앱이 액세스할 수 있는 곳이라면 어디에든 저장할 수 있습니다. 다른 여러 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 심지어는 수정할 수도 있습니다(콘텐츠 제공자가 그렇게 하도록 허용하는 경우). 예를 들어, Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공합니다. 따라서, 적절한 권한을 가진 앱이라면 어떤 것이든 해당 콘텐츠 제공자의 일부를 쿼리하여 특정한 사람에 대한 정보를 읽고 쓸 수 있습니다. 콘텐츠 제공자는 여러분의 앱에 전용이며 공유되지 않는 데이터를 읽고 쓰는 데에도 유용합니다.
6. 인텐트(Intent)
인텐트는 컴포넌트간의 메시지를 주고 받는 전달자 역할을 합니다. 인텐트를 통해 각 컴포넌트들을 호출, 실행 할 수 있습니다.
인텐트의 종류는 2가지가 있습니다.
명시적 인텐트 – 대상 컴포넌트가 확실한 경우. (패키지명을 포함한 클래스 풀네임)
암시적 인텐트 – 대상 컴포넌트가 정해져있지만, 어떠한 타입과 액션으로 불특정 컴포넌트를 호출하는 방식.
'seKUrity_Study : Andriod' 카테고리의 다른 글
[andriod] JNI와 NDK (0) | 2023.03.14 |
---|---|
[andriod] 안드로이드에서 사용하는 자바와 코틀린 (0) | 2023.03.14 |
[Andriod] apk는 왜 디컴파일이 가능한가? (0) | 2023.03.14 |
[Andriod] apktool 이란? (0) | 2023.03.13 |
[Andriod] 안드로이드(운영체제) 란 무엇인가? (3) | 2023.03.09 |