안드로이드의 특징
- 재사용이 가능한 애플리케이션 프레임워크
- 최적화된 달빅 가상머신 (Dalvik Virtual Machine)
- WebKit 기반의 내장된 웹 브라우저
- SQLite 데이터베이스 지원
- 각종 오디오, 비디오 규격 지원 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
- 블루투스, EDGE, 3G, WiFi 지원
- 카메라, GPS, 나침반, 가속도계 지원
- 풍부한 개발환경 제공 장치
→ 이 정도가 갖추어져 있어야 프레임워크라고 볼 수 있다.
- 오픈소스
- Java 기반
- 쉬운 연동
안드로이드의 구조

애플리케이션의 구성
- 애플리케이션은 컴포넌트로 이루어진다.
- 액티비티(Activity): UI/UX, 사용자 눈에 보이는 것들
- 서비스(Service): 네트워크 등 백그라운드에서 돌아가는 것들
- 방송 수신자(broadcast receiver): App간에 주고받는(방송하는) Intent를 받아서 처리
- 컨텐츠 제공자(content provider):

- 이 4가지를 모두 객체(class)로 디자인한다. (Java는 객체지향언어)
- 액티비티 클래스, 서비스 클래스, 방송수신자 클래스, 컨텐츠제공자 클래스로 디자인 한다.
- 그리고 이 클래스를 상속받으면 된다.
- 상위 클래스의 메소드를 오버라이딩해서 쓰면 된다.
1. 액티비티(Activity)
- 사용자가 보는 전체 화면을 하나의 Activity라고 보면 된다.
- 어떤 이벤트가 발생하면, 어떻게 응답으로 처리할 것인지 정의하는 것이다.
- 사용자가 보는 화면은 여러 개 이므로 Activity는 여러 개이다.
- 이런 Activity들이 모여서 애플리케이션이 된다.
- 맨 처음 나오는 Activity = 프론트 Activity = 최상단 Activity
- 서비스(Service)와의 차이점: 활성화된 Activity만이 활동을 한다.
2. 서비스(Service)
- 백그라운드에서 실행되는 컴포넌트
- 화면없이, 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업
- 예: 배경 음악을 연주하는 작업
- 액티비티(Activity)와의 차이점: 활성화되지 않아도 계속 활동한다.
3. 방송 수신자(broadcast receiver)

- 방송을 받고 반응하는 컴포넌트
- 누가 방송? 방송 수신자가 라디오를 켜서 SMS가 수신되었다고 방송함
- 누가 반응? SMS가 수신되었을 때 응답해야 하는 것이 처리함
4. 컨텐츠 제공자(content provider)

- 데이터를 관리하고 다른 애플리케이션에게 제공하는 컴포넌트
- 데이터를 가져가도 되는 건지 검증함
PC 애플리케이션과의 차이점

- 다른 애플리케이션의 코드를 사용할 수 없다.
- 예: 카톡에 있는 데이터를 Skype가 가져와서 쓸 수 없다.

- 다른 애플리케이션의 컴포넌트 사용 가능
- 예: 카메라 애플리케이션이 찍은 사진을, 보정어플 Epik에서 편집하기위해 찍었던 사진을 가져올 수 있다.
인텐트 (Intent)

- 애플리케이션은 의도(Intent)를 적어서 안드로이드에 전달하면 안드로이드가 가장 적절한 컴포넌트를 찾아서 활성화하고 실행한다.
- 예: 우리의 Activity가 /m/fl.jpg를 view하라는 인텐트를 받으면, 가장 적절해보이는 액티비티 #1을 실행한다.
Manifest 파일

- 적재목록, 앱의 정보들을 기술한 것

- XML을 사용한다.
<activity> 태그: 액티비티 선언
<service> 태그: 서비스 선언
<receiver> 태그: 방송 수신자
<provider> 태그: 컨텐트 제공자
- Java 파일에 모든 것을 담으려면, 모든 것을 또 컴파일 해야하고 굉장히 귀찮다. 그래서 구조화된 정보를 처리하는 데에 적합한 것이 필요하다. 그게 바로 Manifest 파일.
XML 파일
- 웹 상에서 구조화된 텍스트 형식의 문서를 전송하고 수신하며 처리가 가능하도록 만든 마크업 언어
구성

- Java 파일 (혹은 Kotlin 파일)
- XML 파일 (리소스)
- 실제 자원 (아이콘과 같은 그림 파일 등)
이 3가지가 .apk 파일로 합쳐지고, 이것이 단말기에 배포되는 것이다.