2009년 10월 14일 수요일

안드로이드 애플리케이션 구조

1. 사용자 인터페이스
Intent Receiver
핸드폰으로 전화오거나,네트웍 접속이 활성화 되는 것 처럼 외부에서 이벤트가 발생했을 때 처리하기 위해 사용된다.
Intent Receiver는 Activity와 같이 UI를 그리는 것이 아니라 NotificationManager를 이용하여 사용자에게 어떤 일이
발생했는지 알려준다.
Intent Receiver도 'AndroidManifest.xml'파일에 등록해야 하는데 Context.registerReceiver()를 이용하여 코드에서
등록할 수 있다.
Service
UI와 상관 없이 오랫동안 존재하면서 실행되는 코드이다.
Activity에서 Context.startService()문장을 실행하면, Service로 실행된다.
Content Provider
데이터를 SQLite 데이터베이스에 저장하거나 데이터베이스를 사용하지 않고 단순히 파일에 저장할 수 있다.
Content Provider는 어떤 애플리케이션 데이터를 다른 애플리케이션이 공유할 필요가 있을 때 아주 유용하다.
이 클래스를 이용하면 다른 애플리케이션에서 데이터를 저장하거나 가져올 수 있다.

2. 화면 구성 요소들의 계층 구조
애플리케이션의 가장 기본적인 구성 단위는 Activity라는 클래스이며, 이 자체로는 아무것도 보여줄 수 없고, Activity에
View와 ViewGroup클래스를 사용해야 비로소 화면에 무엇인가를 표시할 수 있다.
사각 레이아웃_View
View클래스는 화면에서 직사각형 형태의 레이아웃과 각종 정보를 저장하는 자료 구조이다. View 클래스는 화면의 크기 조절,
레이아웃 구성, 그리기,포커스 변화 키 처리 등을 위해 사용된다.
View클래스는 위젯(Widget)의 베이스(base)클래스로도 사용된다.
View들의 집합_ViewGroup
ViewGroup은 말 그대로 여러 개의 View가 있는 것이라고 생각하면 된다. 휴대폰 화면에는 하나의 View만 있는 것이 아니라
여러 개의 뷰가 다양한 형태로 존재한다.
트리 구조의 사용자 인터페이스
Activity가 UI를 구성할 때는 setContentView()메소드를 호출하면 된다. Activity활성화되면, 시스템은 루트 노르를 화면에 그리며,
순서대로 각 ViewGroup은 자기의 하위 노드를 그린다.
각 View에서는 Draw()호출하여 그리는데, 하위의 View는 자신이 그려질 크기와 위치를 부모에게서 결정받게 된다.
LayoutParams
뷰 객체들을 어떻게 그려야 하는지에 대한 정보를 부모 객체에서 알려준다. LinearLayout은 3개의 자식 노드를 선형으로 배치해야 한다.

3. View Groups
FrameLayout
단순히 빈 공간으로 모든 객체들이 화면의 왼쪽 위를 기준으로 그려진다.
LinearLayout
모든 하위 구성 요소를 수직 또는 수평 형태중 하나로 정렬하여 그린다.
TableLayout
AbsoluteLayout
정확히 x,y좌표를 제시해야 하위 구성 요소들을 화면에 출력할 수 있다.
Gallery
4. XML을 이용한 화면 디자인
XML을 이용해 화면 디자인을 할 수 있다.
화면 디자인을 위한 XML파일은 'res\layout'폴더에 만들어진다.
XML파일은 안드로이드 GUI클래스와 일치하는 태그로 구성된다. 태그를 '엘리먼트'라고한다.
엘리먼트의 어트리뷰트는 클래스의 메소드(함수)와 비슷한 개념이다.

5. 후킹,이벤트,테마
1.화면 엘리먼트의 후킹
XML파일을 보면 태그에 id="@+id/label"과 같이 정의되어 있다.
이 label 아이디어가 가리키는 엘리먼트의 조소는 R클래스에 기록된다.
안드로이드에서 특정 엘리먼트를 검색할 수 있다. 이를 "후킹"이라고 한다.