“ 구글의 안드로이드 프로그래밍 ” 4 강 요약 정리

Preview:

DESCRIPTION

“ 구글의 안드로이드 프로그래밍 ” 4 강 요약 정리. 서강대학교 게임교육원 게임소프트웨어 개발학과 김성애. Chapter 04. 애플리케이션의 구조와 사용자 인터페이스. 02. Intent receiver Service Content provider. 01. ACTIVITY. 03. 프로세스 라이프 사이클. 07. 후킹 , 이벤트 , 테마. 04. 화면 구성 요소들의 계층구조. 05. 레이아웃 객체. 06. XML 을 이용한 화면 디자인. Chapter 04. - PowerPoint PPT Presentation

Citation preview

“ 구글의 안드로이드 프로그래밍” 4 강 요약 정리

서강대학교 게임교육원 게임소프트웨어 개발학과 김성애

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

01. ACTIVITY

01. ACTIVITY

ACTIVITY 란 윈도우 OS 의 ‘윈도우’와 같은

애플리케이션의 화면을 칭한다 . 윈도우 OS 처럼 안드로이드 애플리케이션도

여러 개의 ACTIVITY 를 가질 수 있다 .

01. ACTIVITY

SYSTEMACTIVITY

USER

ACTIVITY 는 UI COMPONET 를 화면에

표시하고

시스템 , 유저와 프로세싱 한다 .

01. ACTIVITY

새로운 화면이 열리면 이전화면은

히스토리 스택 [Task stack] 에

저장된다 .

01. ACTIVITY + 액티비티 라이프 사이클

액티비티 생성

01. ACTIVITY + 액티비티 라이프 사이클

onCreate()

액티비티가 생성될 때

처음 호출되는 메소드 .리소스를 초기화한다 .

01. ACTIVITY + 액티비티 라이프 사이클

onStart()

ACTIVITY 가 사용자에게

보여줄 준비가 되었을

때 호출된다 .

01. ACTIVITY + 액티비티 라이프 사이클

onResume()

ACTIVITY STACK 의

맨 위에 있다 . 사용자의 입력처리가

가능할 때 호출된다 .

01. ACTIVITY + 액티비티 라이프 사이클

액티비티 활성화

01. ACTIVITY + 액티비티 라이프 사이클

다른 액티비티가

위로 올 경우

01. ACTIVITY + 액티비티 라이프 사이클

onPause()

데이터의 저장 , 애니메이션의 중지 ,CPU 소비 중단 수행 .이전 액티비티가

Resume 되기 전 호출

된다 .

01. ACTIVITY + 액티비티 라이프 사이클

액티비티가 최상위로

온다 .

01. ACTIVITY + 액티비티 라이프 사이클

액티비티가 화면에

보이지 않을 경우

01. ACTIVITY + 액티비티 라이프 사이클

onStop()

액티비티가 스택의

최상위에 있지 않으므로

보여지지 않는다 .

01. ACTIVITY + 액티비티 라이프 사이클

Stop 된 ACTIVITY 가

다시 최상위 화면으로

올 경우

01. ACTIVITY + 액티비티 라이프 사이클

onRestart()

ACTIVITY 가 멈췄을

경우에 재시작하고자

할 때 호출된다 .

01. ACTIVITY + 액티비티 라이프 사이클

onDestroy()

호출되면 ACTIVITY 를

파기한다 .

01. ACTIVITY + 액티비티 라이프 사이클

다른 어플리케이션에서

메모리가 필요할 때

01. ACTIVITY + 액티비티 라이프 사이클

프로세스가 종료된다 .

01. ACTIVITY + 액티비티 라이프 사이클

유저가 해당

ACTIVITY 로

돌아가고자 할 때

01. ACTIVITY + INTENT

ACTIVITY ACTIVITYintent

INTENT 란 안드로이드에서 화면과 화면사이를

이동할 때 쓰는 클래스로 어플리케이션이 해야

하는 정보가 담겨있다 .

ACTIVITY

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

01. ACTIVITY

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

02. Intent receiver, Service, Content provider

02. Intent receiver, Service, Content provider

INTENT Receiver 란 네트워크 접속의 활성화나

전화가 걸려오는 등 외부에서 이벤트가 발생했을

때 처리하기 위해 사용된다 . Notification Manager 를 이용해서 사용자에게

어떤 일이 발생했는지를 알려준다 .

02. Intent receiver, Service, Content provider

ACTIVITY

SER-

VICE

ACTIVITY ACTIVITY

Service 는 화면으로 보여지는 것과 상관 없이

오랫동안 존재하면서 실행되는 코드이다 . Activity 의 Context.startService() 문장을

실행하면 해당 서비스를 멈출 때까지 Service 로

실행한다 .

02. Intent receiver, Service, Content provider

APPLICATION APPLICATION

Data Sharing

Content Provider 클래스를 이용하면 애플리케이션에서 SQLite 데이터베이스에 저장하지 않고 데이터를 저장하거나 다른 애플리케이션과 데이터를 공유할 수 있다 .

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

03. 프로세스 라이프 사이클

FOREGROUND ACTIVITY

VISIBLE ACTIVITY

BACKGROUND ACTIVITY

사용자가 현재 조작중인

최상위 화면의 ACTIVITY.가장 중요한 프로세스로

메모리가 부족해도 가장

마지막에 제거된다 . EMPTY PROCESS

03. 프로세스 라이프 사이클

FOREGROUND ACTIVITY

VISIBLE ACTIVITY

BACKGROUND ACTIVITY

사용자 화면에는 보여지지만

최상위화면이 아닌 화면 . FOREGROUND ACTIVITY다음으로 중요하다 .

EMPTY PROCESS

03. 프로세스 라이프 사이클

FOREGROUND ACTIVITY

VISIBLE ACTIVITY

BACKGROUND ACTIVITY

사용자에게 보여지지 않고

멈춘 화면 . 상위 , 차상위

프로세스가 메모리 요구 시

제거된다 .

EMPTY PROCESS

03. 프로세스 라이프 사이클

FOREGROUND ACTIVITY

VISIBLE ACTIVITY

BACKGROUND ACTIVITY

Service, BroadcastRe-ceiver클래스와 같이 ACTIVITY 도

없고

애플리케이션 컴포넌트도

없는

것을 EMPTY PROCESS 라고

한다 . 메모리가 부족해지면

시스템에 의해 즉시 제거된다 .

EMPTY PROCESS

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

04. 화면 구성 요소들의 계층구조

View 클래스는 직사각형 형태의

레이아웃과 각종 정보를

저장하는 자료구조이다 .화면의 크기 , 레이아웃 , 그리

기 , 포커스 변화 , 스크롤링과 키

처리 등을 위해 사용된다 .

VIEW

+ View

VIEW

04. 화면 구성 요소들의 계층구조

ViewGroup 은 다양한 형태의

View 들의 집합이다 . ViewGroup 은 View 안에 또

다른 View 를 포함하는

구조적 형태를 지원한다 . VIEW VIEW

VIEW VIEW

+ ViewGroup

04. 화면 구성 요소들의 계층구조

안드로이드에서는 Activity 의 UI 를 View 와

ViewGroup 의 트리구조를 이용하여 구성한다 .각 ViewGroup 은 가용 공간 계산 후 하위의 View를 배치한다 .

+ 트리구조의 사용자 인터페이스

04. 화면 구성 요소들의 계층구조+ LayoutParams

LayoutParams 의 서브

클래스는

뷰 객체들을 어떻게 그려야

하는 지에 대한 정보를 부모

객체에게 알려준다 . 각 하위 요소들은 부모의

속성에 맞는 LayoutParams를 정의해야 한다 . 모든

뷰그룹은 가로 , 세로 , 여백 , 테두리 속성을 가지고 있다 .

04. 화면 구성 요소들의 계층구조

-WRAP_CONTENT 콘텐츠를 표시하는 데

필요한 최소한의

크기로

그린다 .

+ LayoutParams

WRAP_CONTENT FILL_PARENT

-FILL_PARENT부모 객체와의 패딩

( 여백 )을 제외한 나머지 모든

공간을 차지한다 .

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

05. 레이아웃 객체+ FrameLayout

가장 단순한 레이아웃 객체로 , 모든

객체들이 화면의 왼쪽 위를 기준으로

그려진다 . 기준점을 설정할 수 없으며 특정

객체를 그린 후 다른 객체를 그리면

먼저 그린 객체는 가려진 만큼

지워진다 .

05. 레이아웃 객체+ LinearLayout

LinearLayout 은 모든 하위

구성요소를

수직 , 수평 형태 중 하나로 정렬하여

그리는 형식이다 . 하위 구성 요소들 간의 마진과 정렬 , 가중치값을 지정할 수 있다 .

LinearLayout

Click to addName

Comments

05. 레이아웃 객체+ LinearLayout

가중치 값은 화면

구성 요소들이 남는

공간을 어떻게

활용할지 결정하는

값으로 , 가중치값이

다르면 남는 공간을

가중치 비율별로

배분한다 .

LinearLayout

Click to addName

Comments

LinearLayout

Click to addName

Comments

가중치 기본 값이 전부 0 일

Comments 에 가중치 값을

1 로 주었을 경우

05. 레이아웃 객체+ TableLayout

TableLayout 에서는

테이블의 행과 열을

기준으로 하위

구성요소들을 배치한

다 . TableLayout 컨테이너는 테두리

라인을 표시하지 않는

다 .

5:57 PMGViews/Layouts/TableLayout/Ex 4

Open…Save As… Ctrl-Shift-S

Ctrl-O

05. 레이아웃 객체+ AbsoluteLayout

AbsoluteLayout 에서는 하위

구성 요소들을 화면에 표시하기

위해서 x,y 좌표를 직접

설정해주어야 한다 . 좌측상단을 기준으로 (0,0) 이나

서로 다른 단말기 환경에서는

예상과 다르게 그려질 수 있기

때문에 가급적 사용하지 않는다 .

AbsoluteLayout

Click to addName

Comments

(0,0)(x1,y1)

(x2,y2)

(xn,yn)

05. 레이아웃 객체+ RelativeLayout

RelativeLayout 에서는 하위 구성 요소들이 다른 구성

요소의 상대적인 위치에 그려진다 .

Views/Layouts/RelativeLayout/Example

Can-cel OK

Type here:

05. 레이아웃 객체+ RelativeLayout

Views/Layouts/RelativeLayout/Example

Can-cel OK

Type here:

Button•Width : wrap_content•Height : wrap_content•toLeft : “okButton”•alignTop : “okButton”•Text : “Cancel”

Button•ID : okButton•Width : wrap_content•Height : wrap_content•Below : “textEntry”•alignParentRight : true•marginLeft : 10•Text : “OK”

RelativeLayout•Width : fill_parent•Height : wrap_content•Background : gray•Padding : 10

EditText•ID : textEntry•Width : fill_parent•Height : wrap_content•Below : “label1”

TextView•ID : label1•Width : fill_parent•height: wrap_content•Text : Type here:

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

06. XML 을 이용한 화면 디자인

화면 디자인을 하드 코딩하는 번거로운

작업을 피하기 위해 화면디자인을 XML파일로 표현하고 프로그램 소스와 분리하여

작업한다 . 안드로이드 GUI 클래스와 일치하는 태그로

구성되며 , 각 클래스들의 메소드와 대부분

유사한 속성을 가지고 있다 . 이러한 태그를 엘리먼트라고 하며 , 엘리먼트의 속성들은 클래스의 메소드와

유사한 개념이다 .

<?xml version = “1.0” encoding = “utf-8”?><!– Demonstrate using a relative layout to create a form --> <RelativeLayout xmlns:android = “http://schemas. android.com/apk/res/android android:layout_width = “fill_parent” android:layout_height = “wrap_content” android:padding = “10px” >

<TextView android:id = “@+id/label” android:layout_width android:layou andro

06. XML 을 이용한 화면 디자인

TextView, EditText, Button, Button엘리먼트들의 나열 및 설정을 통해 화면

디자인 .

Views/Layouts/RelativeLayout/Example

Can-cel

Type here:

OK

06. XML 을 이용한 화면 디자인

<?xml version=“1.0”encoding=“utf-8”?><!-- Demonstrates using a relative layout to create a form --><RelativeLayout xmlns:android=“http://schema.android.com/apk/res/android

android:layout_width = “fill_parent”android:layout_height= “wrap_content”android:padding = “10px”>

<TextView android:id=“@+id/label”android:layout_width=“fill_parent”android:layout_height= “wrap_content”android:backgroud=“@android:drawable/editbox_backgroud”android:layout_below=“@id/label”/>

<EditText id=“@+id/entry”android:layout_width=“fill_parent”android:layout_height=“wrap_content”android:backgroud=“@android:drawable/editbox_backgroud”android:layout_below=“@id/label”/>

06. XML 을 이용한 화면 디자인

<Button id=“@+id/ok”android:layout_width=“wrap_content”android:layout_height=“wrap_content”android:layout_below=“@id/entry”android:layout_alignParentRight=“true”android:layout_marginLeft=“10px”android:text=“OK”/>

<Button android:layout_width=“wrap_content”android:layout_height=“wrap_content”android:layout_toLeftOf=“@id/ok”android:layout_alignTop=“@id/ok”android:text=“Cancel”/>

<RelativeLayout>

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

Chapter 04 애플리케이션의 구조와 사용자 인터페이스

01. ACTIVITY02. Intent receiver Service Content provider

03. 프로세스 라이프 사이클

04. 화면 구성 요소들의 계층구조

05. 레이아웃 객체

06. XML 을 이용한 화면 디자인

07. 후킹 , 이벤트 , 테마

07. 후킹 , 이벤트 , 테마

07. 후킹 , 이벤트 , 테마

화면을 구성하는 xml 파일 내의 엘리먼트를 자주 접근해야 하기 때문에

애플리케이션 실행중에 텍스트 박스의 내용을 변경하려면 프로그램소스에서

접근해야 한다 . <TextView android:id=“@+id/label”

android:layout_width=“fill_parent”android:layout_height= “wrap_content”android:backgroud=“@android:drawable/editbox_backgroud”android:layout_below=“@id/label”/>

Label 아이디가 가리키는 엘리먼트의 주소는 R 클래스에 기록된다 . R 클래스를 살펴보면 엘리먼트를 구할 수 있다 .

안드로이드에서 특정 엘리먼트를 검색하는 것을 ‘후킹 (hooking)’ 이라고 한다 . 엘리먼트를 검색하는 것은 엘리먼트의 핸들을 얻는 것으로 Activity.findView-ById() 메소드를 호출해 화면 엘리먼트의 핸들을 얻는다 .

07. 후킹 , 이벤트 , 테마

Public class SendResult extends Activity{ protected void onCreate(Bundle savedValue){

…//Listen for button clicks.Button button =

(Button)findViewById(R.id.corky);button.setonClickListner(mCorkyListener);

}//Create an anonymous class to act as a button click list-ner.Private onClickListener mCorkyListener = new OnClickLis-tener() { public void onClick(View v) {

Intent data = new Intent();Data.setAction(“Corky!”);setResult(RESULT_OK, data);finish();

}};

사용자 인터페이스를 위한

이벤트 처리 메소드는

외부에 노출되어 있다 . 그러나 버튼과 같은 몇몇

컴포넌트들은 이벤트 처리

메소드가 별도로 제공되지

않기 때문에 왼쪽과 같이

콜백 (callback) 메소드를

수동으로 등록해야 이벤트를

처리할 수 있다 .

07. 후킹 , 이벤트 , 테마

<!-- AndroidManifest.xml --><manifest xmlns:android = http://schemas.an-droid.com/apk/res/android package = “com.android.home”> <application android:theme = “android:style/Theme_Black”>

<activity class = “.Home”…

</activity> </application></manifest>protected void onCreate(Bundle icicle) { super.onCreate(icicle);

… setTheme(android.R.style.Theme_Light); setContentView(R.layout.linear_layout_3);}

5:57 PMGHello, Android

Hello World, HelloAndroid

테마는 애플리케이션의 전체적인 분위기를 설정한다 . 테마를 설정하려면 ‘ AndroidMani-fest.xml’ 파일을 수정해야 한다 .

// 하드코딩을 통해 테마적용

이미지 출처

https://people.chem.umass.edu/wiki/imageshttp://androidkr.blogspot.com/2009/03/android-activity-task.html

감사합니다 .