2022. 4. 10. 23:38ㆍTech/Mobile(Android, iOS)
- 목차
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.
서론
안드로이드 앱을 만들 때 주로 사용되는 Activity, Service, ContentProvider, BroadcastReceiver라는 4개의 컴포넌트가 있습니다. 이들이 사실상 거의 모든 구성요소라고 해도 과언이 아닐 거라 생각합니다. Unity native 관련 작업을 할 때 필요에 의해 알아본 간단한 개념만 살펴보도록 하겠습니다.
Intent(인텐트)
위 그림에서 보면 가운데 존재하는 Intent라는 것이 있습니다. 간단히 말하면 컴포넌트 간의 메시지를 주고받는 메시징 오브젝트라고 생각하면 됩니다. 컴포넌트끼리 전활 될 때에는 Intent를 거쳐서 전환되게 됩니다. 그렇기에 전환 시 진행할 작업이나 데이터 등을 함께 전달하기도 합니다.
예를 들어보면, 외부에서 url scheme을 통해 앱을 실행할 때가 있을 것입니다. 이때 결국 외부 Activity에서 실행할 앱의 Activity로 전환되는 것이 아닌가? 컴포넌트끼리 전환이 일어난다는 것입니다. 이때 url scheme에 포함된 parameter에 따른 작업을 하고 싶을 때 Intent를 통해 전달한 후 처리하면 될 것입니다.
정리하자면 Intent는 컴포넌트 사이의 [중간다리]인 것입니다.
Activity(액티비티)
버튼, 스크롤, 체크박스 등등 UI 갖는 하나의 화면이 있습니다. 이러한 화면을 통해 앱과 인터렉티브를 하면서 이용을 하게 됩니다.
예를 들어, 메일 화면 Activity는 메일을 읽고, 쓰고, 지우는 등의 활동을 하게 해 줍니다. 직역을 해보면 Activity는 활동이라는 뜻이죠. 안드로이드의 Activity는 활동을 할 수 있는 화면의 단위인 것입니다.
모든 앱은 1개 이상의 Activity를 반드시 가지며, 동시에 2개 이상의 Activity는 띄울 수 없습니다. 단지 하나의 Activity에서 Fragment를 이용하여 분할만 할 수 있을 뿐…
Service(서비스)
현재 Activity 처럼 눈에 보이는 활동을 전면에서 해주는 상태는 Foreground라고 합니다. 그렇다면 눈에는 보이지 않지만, 무언가 처리가 되고 있거나 남아있는 상태는? Background라고 합니다. Background에서 처리되야할 일들이 없지는 습니다. 간혹 음악 플레이어를 Background라고 상태로 돌렸는데(앱을 끄는 것이 아닌 홈버튼 등을 눌러 Activity를 전환시킨 경우) 음악은 계속 나오게 하는 것, Notification을 받는 것 등… 이용하기 나름입니다. Service는 Background에서 실행되는 프로세스를 의미합니다. 눈에 안 보이는 Background에서 실행되기 때문에 화면이 필요가 없습니다.
Content Provider(콘텐트 제공자)
이 녀석은 나중에 앱간 데이터 공유를 소개할 때 자세히 다루도록 하겠습니다. 간단히 이야기하자면, 앱들은 DB를 가지고 있고 이곳에 있는 데이터를 관리는 ContentProvider를 통해서 이용하여 공유합니다. 다른 앱에 데이터를 제공해주는 것도 이를 통해서 하기 때문에 앱 간 데이터 공유가 가능한 것입니다. 4대 Component 중에서 유일하게 생명주기를 갖지 않는 녀석입니다.
Broadcast Receiver(방송 수신자)
안드로이드 단말기는 배터리 부족, 메시지 도착, 시스템 부팅 등 다양한 이벤트나 정보를 발생시킵니다. 이러한 이벤트나 정보를 Broadcast(방송)라고 합니다. 앱들은 사실 이러한 Broadcast를 모두 받을 수 있습니다. 하지만 굳이 다 받을 필요가 있을까요? 필요한 것만 받으면 될 것입니다. 우리도 방영해주는 모든 프로그램을 보지 않죠, 보고 싶은 것만 보니까요.(사실 몸이 여러 개면 동시에 보고 싶은 마음도 있어요) 이때 앱들은 BroadcastReceiver를 통해 특정 Broadcast를 받으면 됩니다. BroadcastReceiver는 AndroidManifest.xml 에 정의되어있는 Broadcast를 수신받아 적절한 처리를 하게 도와주는 Component입니다. 이는 정적인 방법이고 동적으로도(런타임에) 등록 가능합니다.
리소스 출처
[그림 1] : 꼬들 스튜디오, https://ggodol.tistory.com/
[그림 2, 3] : 코딩 팩토리, https://coding-factory.tistory.com/205?category=758272
'Tech > Mobile(Android, iOS)' 카테고리의 다른 글
[iOS]iOS 의존성(Dependency ), cocoapods (코코아팟) (0) | 2022.04.11 |
---|---|
[iOS]iOS 앱 간 데이터 공유 키체인 쉐어링(Keychain sharing) (0) | 2022.04.11 |
[Android]가비지 컬렉터(Garbage collector) (0) | 2022.04.11 |
[Android]Android 앱 간 데이터 공유(ContentProvider와 ContentResolver) (0) | 2022.04.11 |
[Android]JVM, JRE, JDK (0) | 2022.04.10 |