본문 바로가기

Programming/Android

#00. 안드로이드 프로그래밍의 기초개념

안드로이드 구조


1. Linux Kernel

- 리눅스버전 2.6사용

- 보안, 메모리관리, 프로세스관리, 네트워크, 장치드라이버 시스템 제공

- 하드웨어와 나머지 소프트웨어 스택 사이의 추상화 계층으로 동작

- 모바일 장치의 하드웨어가 다르더라도 상위 계층에게 균일한 환경 제공


2. Android Runtime

- Application을 실행시키기 위한 최소한의 환경 제공

- 자바의 코어 라이브러리와 달빅(dalvik) 가상 머신으로 구성

- 달빅(dalvik) 가상머신

- 모든 안드로이드 Application은 리눅스로 부터 하나의 프로세스로 실행

- 각 프로세스마다 자신만의 달빅 가상머신을 가짐

- 레지스터 기반이며 자바 컴파일러에 의하여 컴파일된 class들을 .dex형식으

   로 변환후 실행


Libraries

- 다양한 C/C++ 라이브러리를 포함

- Application 프레임워크를 통해 라이브러리들을 사용

- 시스템 C라이브러리

BSD기반의 표준 C시스템 라이브러리(libc) 제공

- 미디어 라이브러리

PacketVideo의 OpenCORE에 기초

오디오 및 비디오 형식의 재생 및 녹음 지원

(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 등등)

- Surface Manager

디스플레이 서브 시스템을 관리

여러 Application에서 나오는 2차원,3차원 그래픽 레이어들을 렉없이 합성

- LibWebCore

웹 브라우저를 구현하는 첨단의 웹 브라우저 엔진

- SGL

기본 2D 그래픽 엔진

- 3D라이브러리

OpenGL ES 1.0 API기반의 라이브러리, 3D가속을 사용 또는 최적화된 내장 3차원 S/W 레스터라이저 사용

- FreeType

비트맵과 벡터 글꼴 렌더링을 제공

- SQLite

강력하고 가벼운 관계형 DB엔진


3. Application Framework

- 개발자를 위한 API(Application Programming Interface)제공

- 개발자는 H/W장치, 위치정보 접근, 병렬처리 기능, 알람설정 기능, 상태 표시줄 알림

   등의 기능 사용 가능

- 컴포넌트의 재사용을 쉽게 할수 있도록 설계됨

- 서비스와 시스템 제공

- 뷰(View)

리스트, 그리드, 텍스트박스, 버튼, 내장 웹 브라우저

- 컨텐트 제공자(Content Provider)

서로 다른 Application들끼리 데이터 접근,공유 허용

- 리소스 관리자(Resource Manager)

리소스(문자열, 그래픽, 배치관리자 파일)에 대한 접근 관리

- 통지 관리자(Notification Manager)

모든 Application이 상태바에 경고를 표시할수 있도록 함

- 액티비티 관리자(Activity Manager)

라이프사이클 관리, 액티비티 스텍 제공


4. Application

- 모든 Application은 자바 프로그래밍언어를 사용, 동일한 라이브러리를 사용하여 개발





Application 기초 개념

자바소스파일     >    .dex파일     >    .apk파일       다운로드   >  모바일폰에 Install

컴파일러           apkbuilder


- 각 Applacition은 리눅스 운영체제상에서 서로 다른 사용자가 된다.

- 운영처제는 각 Applcation에게 사용자 아이디를 부여하고 Application에 속하는 파일은 

다른 어플리케이션이 접근 할수없다.

- 각 Application은 자신의 가상머신 위에서 실행되며 따라서 다른 Application과는 완벽

하게 분리/독립 된다.




Application Component

- Application을 만드는 빌딩 블록 단위

- 각 컴포넌트들은 하나의 독립된 엔티티로 존재하며 정해진 역할을 수행 한다

- 각 컴포넌트는 Application을 시작하는 진입점을 가질수 있다.

- 4가지 타입의 컴포넌트가 존재한다.

- 액티비티(Activity)

사용자 인터페이스 화면을 가지며 하나의 작업을 담당하는 컴포넌트

Activity라는 class를 상속 받아 작성된다.

- 서비스(Service)

백그라운드로 실행되는 컴포넌트(오래 걸리는 작업/원경프로세스를 위한 작업)

사용자 인터페이스를 가지지 않는다.

다른 컴포넌트에 의하여 시작된다.

Service라는 class를 상속 받아 작성된다.

- 방송수신자(Broadcast Receiver)

방송을 받고 반응하는 컴포넌트

방송들은 시스템에서 발생, 어떤 특정한 이벤트를 알리기위해 방송을 사용

Application들 또한 방송을 사용 가능

사용자 인터페이스를 가지지 않는다.

방송을 수신하여 새로운 액티비티를 실행가능

사용자에게 알림을 위하여 통지매니저(Notification Manager)사용 가능

BroadcastReceiver라는 class를 상속 받아 작성된다.

- 콘텐트제공자(Content Provider)

데이터를 관리, 다른 Application에게 데이터를 제공하는 컴포넌트

데이터는 파일시스템, SQLite DB, 웹상에 저장 가능

콘텐트 제공자 컴포넌트를 이용하여 다른 Application들은 데이터를 Query(질

의)/변경 가능

다른 Application이 데이터를 받고 저장할수있는 메소드들을 재정의하여 제공

ContentProvider라는 class를 상속 받아 작성된다.




인텐트(Intent)

- 각 Application들은 서로 다른 Application의 컴포넌트들을 요청메시지와 함께 승인 받

으면 다른 Application의 컴포넌트들을 사용 할수있다.

- 인텐트는 Application의 의도를 적어서 안드로이드에 전달하여 안드로이드가 가장 적절

한 컴포넌트를 찾아 활성화 하고 실행한다.

- 인텐트는 Intent class의 객체로써 컴포넌트가 일요로 하는 요청 내용을 가지고 있다.


요청하는 컴포넌트가

액티비티/서비스 일경우

-인텐트 객체안에 필요한 액션의 이름(view/send)과 사용할 데이터의 URI를 가

지고 있다.

방송수신자 일경우

- 인텐트가 공지 사항을 가지고 있다.

콘텐트제공자 일경우

- 인텐트에 의하여 실행되지 않고, 별도의 객체인 콘텐트리졸버(Content Resolver)를 사용 하여 실행, 콘텐트리졸버가 콘텐트제공자와의 모든 트랜잭션을 처리 하기 때문에 우리는 단순히 콘텐트리졸버 객체의 메소드를 호출 하면 된다. 이것은 보안을 위하여 정보를 제공하는 콘텐트제공자와 정보를 요청하는 컴포넌트 사이에 추상적인 계층을 하나더 깔아둔 것이다.


각 컴포넌트를 활성화 하는 메소드

액티비티

startActivity(), startActivityForResult()

서비스

startService(), bindService()

방송

sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

콘텐트제공자

콘텐트리졸버의 query()




매니페스트 파일(Manifest File)

- Application안의 모든 컴포넌트들은 매니페스트 파일에 선언 되어야 한다

- XML로 작성되어 있으며 모든 Application에 대하여 AndroidManifest.xml이란 이름으    

로 존재 한다.

- 매니페스트 파일에 선언되지 않은 액티비티, 서비스, 콘텐트제공자는 시스템에서 전혀 

알수가 없다.


컴포넌트들의 대한 선언을 제외한 다른 역활

- 인터넷 접근과 같이 Application이 요청하는 권한을 나열

- Application이 필요한 최소한의 API레벨을 선언

- Application이 필요로하는 H/W사양을 선언

'Programming > Android' 카테고리의 다른 글

#01. Android Programming 개발환경 구축  (0) 2012.10.18