이 글은 제가 공부하기 위한 안드로이드 문서 정리글로 원문은 아래 링크에 있습니다.
원문 링크
앱 기초
앱 기본 요소
이 문서에서는 앱의 4대 구성 요소 및 Intent는 간단히 다루고 각각 세세하게는 다른 문서에서 다룸.
- 각 Android 앱은 자체적인 보안 샌드박스에 속함.
- Android 운영체제는 멀티유저 Linux 시스템, 각 앱은 각기 다른 사용자
- 시스템은 각 앱에 고유한 Linux Id 할당. 시스템은 앱 안의 모든 파일을 이 Linux Id만을 이용하여 접근할 수 있도록 권한을 설정.
- 각 프로세스는 자체 가상 머신이 있기 때문에 앱의 코드는 다른 앱과 격리됨.
- 각 앱은 자신의 리눅스 프로세스 위에서 실행됨. 시스템은 앱의 어떤 구성요소가 시작되든 프로세스를 시작하고 필요없을 때 또는 다른 앱을 위해 메모리가 필요할 때 프로세스를 종료시킴.
- 위와 같은 구조로 인해 앱이 다른 앱의 정보에 직접 접근할 수 없다. 하지만 앱이 다른 앱과 데이터를 공유하는 방법은 여러가지가 있다.
- 두 개의 앱이 같은 Linux ID를 사용하도록 설정할 수 있다. 이 때 이 두 앱은 같은 인증서로 서명되어야 한다.
앱 구성 요소
앱의 4대 구성요소와 Intent
- 앱은 아래 4가지로 이루어짐. 각 요소는 목적과 수명 주기가 모두 다름. 아래 각 요소는 각각 앱에 대한 진입점임
- Activity
- 사용자와 상호작용하기 위한 요소. 화면 하나를 나타냄.
- 사용자가 관심을 기울이는 작업이기 때문에(화면에 보이고 있으므로) 시스템은 화면에 보이는 Activity를 실행하는 프로세스가 계속 유지될 수 있도록 함.
- 프로세스가 죽었을 때 Activity는 이전의 상태를 저장하여 사용자가 다시 Activity로 돌아가고자 할 때 이를 복원함.
- Service
- 앱이 백그라운드에서 계속 실행하기 위한 요소. UI를 제공하지 않음.
- 서비스는 포그라운드 서비스와 백그라운드 서비스로 나뉨. 두 서비스의 차이점은 사용자가 서비스가 실행되고 있음을 인지할 수 있는지 여부. 백그라운드 서비스는 상대적으로 중요도가 낮아 시스템은 RAM이 부족할 경우 백그라운드 서비스를 더 잘 종료시킴.
- Broadcast Receiver
- 시스템이 이벤트를 앱에 전달하도록 지원하는 요소.
- 이 요소 역시 앱의 진입점이기 때문에 시스템은 실행되지 않은 앱에도 브로드캐스트를 전달할 수 있음.
- 시스템 뿐만 아니라 앱도 브로드캐스트를 시작할 수 있음.
- UI는 제공하지 않지만 상태 표시줄에 알림을 생성할 수 있음
- Content Provider
- File System, SQLite DB, 웹 등 앱이 접근할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 집합.
- Content Provider를 통해 위 데이터를 조회하거나, Content Provider가 허용할 경우 수정도 가능.
- 시스템에게 Content Provider는 uri로 식별되는 데이터를 다루기 위한 앱의 진입점.
구성 요소 활성(Intent)
- Activity, Service, Broadcast Receiver는 Intent라는 비동기식 메시지로 시작될 수 있음.
Manifest File
- 매니페스트는 아래와 같은 사항을 선언할 수 있음
- 구성 요소 선언
- 앱의 4대 구성 요소를 선언. 시스템은 4대 구성 요소 실행 전 Manifast에서 해당 요소가 실제 존재하는지 확인함.
- Activity, Service, Content Provider는 매니페스트에 선언되지 않았을 경우 실행될 수 없음. 단, Broadcast Receiver는 매니페스트에 선언하지 않고 코드를 통해 동적으로 생성하여 시스템에 등록해도 됨.
- 구성 요소의 기능 선언
- 암시적 Intent는 Intent가 수행해야 할 작업의 유형, 또는 다룰 데이터의 종류를 지정함. Manifest에는 각 구성 요소가 어떤 유형의 작업을 처리할 수 있는지, 어떤 종류의 데이터를 다룰 수 있는지 선언함. (Intent-filter)
- 앱 요구사항 선언
- 앱이 필요한 하드웨어적, 소프트웨어적 요구사항을 선언함. 예를 들어 앱이 카메라가 필요할 경우 이를 매니페스트에 명시할 수 있고 Google Play는 이 정보를 통해 요구사항이 충족되지 않는 기기에서는 해당 앱이 깔리지 않도록 할 수 있음.
댓글 영역