36
To be an Android Expert 문양세 강원대학교 IT대학 컴퓨터학부

15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

To be an Android Expert

문양세강원대학교 IT대학 컴퓨터학부

Page 2: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

애플리케이션 기초

애플리케이션 컴포넌트

Part 1

애플리케이션 컴포넌트

액티비티와 태스크

프로세스와 쓰레드

컴포넌트 생명주기 Part 2

2

Page 3: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

태스크는 명시적으로 정의/선언하는 것이 아니라 주어진 목적을 위해 태스크는 명시적으로 정의/선언하는 것이 아니라, 주어진 목적을 위해

현재 수행되고 있는 액티비티들의 스택이다.◦ 예를 들어, 어떤 액티비티가 특정 위치 상의 시가지 지도를 보여주고자 한다 하자.예를 들어, 어떤 액티비티가 특정 위치 상의 시가지 지 를 여주 자 한다 하자

◦ 해당 액티비티는 안드로이드에 이미 존재하는 맵 뷰어 액티비티를 실행(인텐트를사용하여 start 시킴)하게 된다.이 경우 이전 액티비티 위에 맵 어 액티비티가 행되며 키에 의해 이전◦ 이 경우, 이전 액티비티 위에 맵 뷰어 액티비티가 수행되며, BACK 키에 의해 이전

액티비디로 돌아갈 수 있다.◦ 이들 관련 액티비티들은 스택에 관리되며, 이들 액티비티를 하나의 태스크라 한다.이 액티비티 택에 리되며 이 액티비티 하나의 태 라 다

처음 태스크를 시작한 액티비티를 루트 액티비티라 한다.◦ 새로운 액티비티가 시작될 때, 새로운 태스크로 수행될 수도 있으며(새로운 스택을

사용하여 시작할 수 있으며),◦ (동일한 스택을 사용하여) 이전 액티비티가 속한 태스크 내에 수행될 수도 있다.

3

Page 4: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

4그림: from kandroid.org

Page 5: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

5

그림: from kandroid.org

Page 6: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

인텐트(Intent)를 사용하여 하나의 액티비티에서 다른 액티

비티를 시작시킬 수 있다. 시작할 액티비티의 인텐트 필터 카테고리 값에 따라, 새로시작할 액티비티의 인텐 필터 카테 리 값에 따라, 새운 태스크 혹은 기존 태스크에서 해당 액티비티가 수행된다. (일반적으로, AndroidManifest.xml에서 지정한다.)(일반적으로, AndroidManifest.xml에서 지정한다.)◦ android.intent.category.LAUNCHER: 새로운 태스크 시작

◦ android intent category BROWSABLE 등: 기존 태스크에서 동작android.intent.category.BROWSABLE 등: 기존 태스크에서 동작

6

Page 7: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

새로운 액티비티를 시작하려면,새 운 액티비티를 시작하려면,◦ 1. 액티비티를 시작을 유도할 View를 결정/생성

2 새로운 액티비티를 생성◦ 2. 새로운 액티비티를 생성

Java class를 생성

Layout을 위한 XML 파일을 생성

관련하여, string XML 파일을 수정관련하여, g 파일을 수정

◦ 3. AndroidManifest.xml에 해당 액티비티를 등록

4 기존 액티비티에서 새로운 액티비티를 시작( t t)◦ 4. 기존 액티비티에서 새로운 액티비티를 시작(start)

7

Page 8: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

액티비티를 시작을 유도할 View를 결정/생성

main.xml

button04 추가

string.xmlstring.xml

8

Page 9: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

새로운 액티비티를 생성 (1/4)

UiPracticeFirstAct1.java 생성

9

Page 10: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

새로운 액티비티를 생성 (2/4)

10

Page 11: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

새로운 액티비티를 생성 (3/4)act1.xml

strings.xml

11

Page 12: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

새로운 액티비티를 생성 (4/4)

12

Page 13: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

AndroidManifest.xml에 액티비티 등록 (1/2)

기존 activity

13

추가된 새로운 activity

Page 14: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

AndroidManifest.xml에 액티비티 등록 (2/2)AndroidManifest.xml

string.xml

14

Page 15: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

기존 액티비티에서 새로운 액티비티 시작UiPracticeFirst.java

추가된 부분버튼이 클릭되면,

인텐트를 이용하여 새로운 액티비티 시작

15

Page 16: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

오류가 있는 경우(특히, Manifest에 등록되지 않은 경우)

16

Page 17: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

정상적으로 수행된 경우

17

Page 18: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

홈 화면을 봅시다.

• 두 개의 애플리케이션이 있는 것으로 보인다.• 실은 새로운 태스크가 생성되었기 때문이다• 실은 새로운 태스크가 생성되었기 때문이다.• 왜 이런 현상이 나타났는가?android.intent.category.LAUNCHER 로

설정했기 때문이다설정했기 때문이다.

18

Page 19: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

◦ 새로운 태스크가 아닌 액티비티만 시작 (1/2)AndroidManifest.xml

LAUNCHER 대신에 BROWSABLE 사용

19

Page 20: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

◦ 새로운 태스크가 아닌 액티비티만 시작 (2/2)

• UiPrac1stAct1이 보이지 않는다.• 하나의 태스크에서 액티비티들이 수행된다.

20

Page 21: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

애플리케이션 기초

애플리케이션 컴포넌트

Part 1

애플리케이션 컴포넌트

액티비티와 태스크

프로세스와 쓰레드

컴포넌트 생명주기

21

Page 22: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

애플리케이션의 첫 번째 컴포넌트가 실행되어야 할 때, 안드로이드는이의 실행을 위해 하나의 실행( ) 레 갖 리이의 실행을 위해 하나의 실행(execution) 쓰레드를 갖는 리눅스 프로

세스를 시작한다.◦ 디폴트로 모든 애플리케이션의 컴포넌트는 하나의 프로세스 내의 메인 쓰레드에◦ 디폴트로 모든 애플리케이션의 컴포넌트는 하나의 프로세스 내의 메인 쓰레드에

서 동작한다.◦ 그러나, 컴포넌트는 메인이 아닌 다른 쓰레드에서 동작할 수도 있으며, 다른 프로

세스의 쓰레드에서 수행될 수도 있다.

22

Page 23: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

애플리케이션의 각 컴포넌트는 자신이 실행될 프로세스를 지정

할 수 있다.◦ Manifest 파일에서 process 애트리뷰트로 지정한다.◦ 모든 컴포넌트는 지정된 프로세스의 메인 쓰레드에서 인스턴스화 되며, 그 컴포넌트에 대한 시스템 호출은 메인 쓰레드로부터 디스패치

(dispatch)된다(dispatch)된다.

23

Page 24: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

메인 쓰레드 이외에, 백그라운드 작업을 위해 쓰레드를 생성할메인 레 이외에, 백 라운 작업을 위해 레 를 생성할

수 있다. 특히, 빨리 응답할 수 없는(완료할 수 없는) 컴포넌트의 경우, 별 특히, 빨리 응답할 수 없는(완료할 수 없는) 컴포넌트의 경우, 별도의 쓰레드에 할당하는 것이 바람직하다.

쓰레드는 표준 Java 쓰레드 오브젝트를 사용하여 코드에서 생성 쓰레드는 표준 Java 쓰레드 오브젝트를 사용하여 코드에서 생성

된다.

24

Page 25: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

애플리케이션 기초

애플리케이션 컴포넌트

Part 1

애플리케이션 컴포넌트

액티비티와 태스크

프로세스와 쓰레드

컴포넌트 생명주기

25

Page 26: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

액티비티의 세 가지 상태

◦ 활성화(active) or 실행 중(running) 상태 해당 액티비티가 사용자 액션에 대한 포커스를 가지고 있을 때이다. 좀 더 쉽게 말해서, foreground 화면에 나타나 있을 때이다.

◦ 멈춤(paused) 상태 포커스는 보유하지 않았으나, 여전히 사용자에게 보이는 상태이다. 다른 액티비티에 의해 가려져 부분적으로만 보이는 상태로서, 해당 액

티비티 살아있 상태이다티비티는 살아있는 상태이다.

◦ 정지(stop) 상태다른 액티비티에 의해 완전히 가려진 상태이다 다른 액티비티에 의해 완전히 가려진 상태이다.

여전히 액티비티의 정보는 유지되나, 메모리 부족 시 종료될 가능성이

높은 상태이다높은 상태이다.

26

Page 27: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

액티비티의 상태가 변하면, 다음의 method가 호출되어, 그 변화가 통

된다보된다.◦ void onCreate(Bundle savedInstanceState)◦ void onStart()◦ void onStart()◦ void onRestart()◦ void onResume()◦ void onPause()◦ void onStop()

void onDestroy()◦ void onDestroy()

이들 method는 상태 변화에 따른 적절한 액션을 위해, override하여사용할 수 있다사용할 수 있다.◦ 대표적인 사용 예가 onCreate() method이다.

27

Page 28: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

entirelifetime

foregroundlifetime

visiblelifetime

28

Page 29: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

entire foregroundlifetime

glifetime

visiblelifetime

29

Page 30: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

entire foregroundlifetime

glifetime

visiblelifetime

30

Page 31: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

entire foregroundlifetime

glifetime

visiblelifetime

31

Page 32: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

서비스가 사용되는 두 가지 방법

◦ 새로운 서비스 시작, 명시적 종료

startService()로 새로운 서비스 시작

stopService()로 실행 중지, 혹은 자신이 스스로 stopSelf()를 사용하여

중지

Methods: onCreate(), onStart(Intent), onDestroy()

◦ 이미 존재하는 서비스 오브젝트에 bind/unbind라이언 가 b d () 사 하여 서비 젝 에 커넥션을 클라이언트가 bindService()를 사용하여 서비스 오브젝트에 커넥션을

만들어 이용

커넥션은 unbindService()로 끊을 수 있음 커넥션은 unbindService()로 끊을 수 있음

Methods: onBind(Intent), onUnbind(Intent), onRebind(Intent)

32

Page 33: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

active lifetime

entire lifetime

33

Page 34: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

하나의 callback method를 가진다.onReceive(Context, Intent)◦ 리시버에게 브로드캐스트 메시지가 도착할 때, 안드로이드는 onReceive() 를 호출하여 메시지를 함하 있는 인텐 젝 를 전달한다를 호출하여, 메시지를 포함하고 있는 인텐트 오브젝트를 전달한다.

◦ 리시버는 onReceive() method를 실행하는 동안에만 활성화되는 것으로

간주한다간주한다.◦ 리시버는 onReceive()가 리턴될 때, 비활성화된다.

34

Page 35: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

(자원이 부족한 모바일 디바이스의 특성을 고려하여) 프로세스들은중요성 계층구조(importance hierarchy) 속에서 유지되며, 자원이부족한 경우 낮은 중요성을 가진 프로세스부터 순차적으로 제거된

다. 프로세스의 중요성 순서

◦ Foreground: 사용자가 현재 인터랙션하는 프로세스

◦ Visible: 인터랙션은 없어도, 눈에는 보이는 프로세스

◦ Service: 서비스를 동작시키고 있는 프로세스

◦ Background: 동작은 하나 visible하지 않은 액티비티를 가진 프로세스

Empty: 어떠한 active한 컴포넌트도 가지지 않은 프로세스◦ Empty: 어떠한 active한 컴포넌트도 가지지 않은 프로세스

(다음 번에 구동될 수 있는 컴포넌트에 대한 캐슁을 수행하고 있음)

35

Page 36: 15. App Fundamentals[Part2]ysmoon/courses/2011_1/android/15.pdf · 13 추가된새로운activity. ... 좀더쉽게말해서, foreground 화면에나타나있을때이다. 멈춤(paused)

36