Upload
seanna
View
204
Download
0
Embed Size (px)
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
감사합니다 .