SlideShare une entreprise Scribd logo
1  sur  11
Activity.Lifecycle
Activity란..
• 가장 쉬운 이해는 "화면" 하나이다.
o 사실은 Activity가 화면을 가질 수 있는 것이며, Activity는 화면 구성 외
에 사용자 입력과 Event들을 접목 시키는 controller 역할을 많이 한다.
o 화면을 가지지 않는 Activity는 어찌 보면 Service라고 볼 수도 있지만, 의외로 화면 밝기 조
정을 위한 Activity와 같이 화면을 가지지 않는 Activity들이 있습니다. 또는 다운로드를 잠시
하면서 화면을 얼려두고 싶은 경우와 같은 경우가 있을 수 있습니다. 이와 같은 추가적인 사
용 예는 구글에서 "android activity no UI"로 검색하면 찾으실 수 있습니다.
• 프로그램은 한 화면에서 모든 동작이 수행이 힘들기 때문에 여러 Activity로
구성이 되고 이들 간에는 서로 통신을 해야 합니다.
• Activity들은 자체적인 Lifecycle을 가지고 있으며, 각 단계에 대한 callback을
지정해서 원하는 동작을 취하게 할 수 있습니다.
Activity 생명 주기 생명 주기에 대한 정확한 이해가 필수!
대부분 개발과정에서 미세한 버그들은 이러
한 생명 주기에 대한 고려가 없는 경우가 대
부분입니다.
게다가 생명 주기는 프로그래머가 강제할 수
는 없습니다. 단지 요청을 할 뿐. 실제 모든
생명 주기 관할은 Android OS 수준에서 일
어납니다(수행이 됩니다.).
이는 다시 이야기 하면, 프로그래머가 원하
지 않는 시점에도 생명이 마쳐질 수 있는 상
황이 있다는 사실 입니다.
대표적인 경우가 메모리가 부족한 경우입니
다.
위 생명 주기를 자세히 보기 전에
Activity 상태에 대해서 먼저 살펴 봅니다.
Activity 상태
• 실행 (active, running)
o 사용자가 현재 사용 중인 상태. 스택의 제일 위에 있으며, 화면 상에서
도 제일 위에 있다. 입력 포커스를 가지며, 사용자 입력을 처리를 담당
합니다.
• 일시정지 (pause)
o 포커스는 잃었지만 사용자에게는 보이는 상태. 위쪽에 다른 Activity가
있지만 화면 전체를 가리지는 않고 반투명 상태가 이에 해당. 살아는 있
지만, 경우에 따라서 시스템에 강제 종료 가능 상태.
• 정지 (stopped)
o 다른 Activity에 의해서 완전히 가려진 상태, 사용자 눈에 보이지 않습니
다. 그러나 메모리 상에 기존 상태를 유지하고 있어서, 필요에 따라서
다시 활성화 되어 화면에 나타날 수 있습니다. 물론 이 상태도 시스템에
의해서 강제 종료 가능합니다.
처음 생성이 될 때. (생성 의미는 메모리에~)
다른 Activity가 현재 Activity위에 잠시 떳다
가 사라져서 원래 Activity가 보이는 경우에
도 onResume
다시 화면에 올라오는 경우는 대부분 여기서
처리를 하는 것이 대부분.
onStart 보다는 onResume을 많이 활용.
onCreate
onResume
onPause
습관적으로 고민을 해야 하는 callback
killable status
onPause
onPause가 호출되면서 부터 Paused 상태가 된다는 것은.
Killable status로 진입이 된다는 이야기입니다.
이 시점 이후로는 시스템이 언제나 필요에 따라서 해당 Activity를
별도 신호 없이 메모리에서 소멸 시켜 버릴 수 있다는 이야기 입니
다.
여기서 별도 신호가 없다는 이야기는 onStop, onDestroy가 호출
이 되지 않는다는 이야기가 됩니다.
즉 onPause는 생명주기의 마지막 보장된 정리 타임이라고 할 수
있습니다. 그렇기에 우리는 이 부분에서 해당 Activity에 대한 정리
를 열심히 해야 합니다.
onPause에 대해서 예제를 통한 추가 조사.
A B
C
B.finish()
A.finish()
App 실행
startActivity(B)
startActivity(C)
C.finish()
각 단계에 대해서 lifecycle callback 로그 남김
아래 순서에 따라서 동작을 수행하고 로그를 추적
1. App 실행
2. startActivity(B)
3. B.finish()
4. startActivity(C)
5. C.finish()
6. A.finish()
여기서 B는 일반 Activity. C는 배경이 투명인
Activity
* 배경 투명 Activity는 android:theme="@android:style/Theme.Translucent.NoTitleBar" 설정 통해서 간단 지정 가능
onPause 실험 결과
1. App 실행
a. A onStart
b. A onResume
2. startActivity(B)
a. A onPause
b. B onStart
c. B onResume
d. A onStop
3. B.finish()
a. B onPause
b. A onRestart
c. A onStart
d. A onResume
e. B onStop
f. B onDestroy
4. startActivity(C)
a. A onPause
b. C onStart
c. C onResume
5. C.finish()
a. C onPause
b. A onResume
c. C onStop
d. C onDestroy
6. A.finish()
a. A onPause
b. A onStop
c. A onDestroy
onPause 에 대한 에매한 부분에 대한 정의
• onPause는 Activity가 stopped 상태로 전환하기 전에 무조건 호
출이 된다.
• Activity가 배경이 투명한 Activity가 뜨는 경우에는 기존 Activity
는 onPause 상태가 유지가 됩니다.
o 여기서 배경이 투명한 Activity라고 함은 Dialog는 절대 아님
을 명심합니다.
o 투명한 Activity 때문에 onPause에서 onStop으로 이동하지
않고, onStop에 머물러 있는 상태가 유지 됩니다.
• onPause 구현은 가능한 빠르게 실행되도록 합니다. 새로 올라오
는 화면의 onStart/onResume이 전 화면의 onPause가 마쳐져야
시작되기 때문입니다.
saveInstanceState
액티비티의 상태를 저장 및 복원하는 콜백 메소드 onSaveInstanceState, onRestoreInstanceState
이건 한 번 해보고 가자
1. Activity 하나에 각종 callback들을 재정의하고 Log를 남
겨서 실제 언제 callback이 수행이 되는 가를 확인하자.
2. Activity를 두개를 만들어서
a. 첫 번째 Activity에서 버튼 클릭해서 두번째 Activity를
생성을 하자.
b. 두 번째 Activity에서 닫기 버튼을 만들어서 다시 원래
Activity로 돌아오자.
c. 두 Activity 모두에 callback들을 정의해서, 언제 호출
이 일어나는 가를 확인하자.

Contenu connexe

Similaire à 02 activity.lifecycle

08 fragment 태블릿 대응
08 fragment   태블릿 대응08 fragment   태블릿 대응
08 fragment 태블릿 대응운용 최
 
06 activity stack and back, flag
06 activity stack and back, flag06 activity stack and back, flag
06 activity stack and back, flag운용 최
 
03 activity.finish
03 activity.finish03 activity.finish
03 activity.finish운용 최
 
1120 현오뱅
1120 현오뱅1120 현오뱅
1120 현오뱅ljh606
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Bansook Nam
 

Similaire à 02 activity.lifecycle (7)

08 fragment 태블릿 대응
08 fragment   태블릿 대응08 fragment   태블릿 대응
08 fragment 태블릿 대응
 
06 activity stack and back, flag
06 activity stack and back, flag06 activity stack and back, flag
06 activity stack and back, flag
 
12 service
12 service12 service
12 service
 
03 activity.finish
03 activity.finish03 activity.finish
03 activity.finish
 
Modern android
Modern androidModern android
Modern android
 
1120 현오뱅
1120 현오뱅1120 현오뱅
1120 현오뱅
 
Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지Android와 Flutter 앱 개발의 큰 차이점 5가지
Android와 Flutter 앱 개발의 큰 차이점 5가지
 

Plus de 운용 최

Wot(daliworks) 20131113
Wot(daliworks) 20131113Wot(daliworks) 20131113
Wot(daliworks) 20131113운용 최
 
NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08운용 최
 
Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"운용 최
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status운용 최
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 
18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상운용 최
 
19 나만의 view 만들기
19 나만의 view 만들기19 나만의 view 만들기
19 나만의 view 만들기운용 최
 
17 adapter view & db
17 adapter view & db17 adapter view & db
17 adapter view & db운용 최
 
16 데이터 저장과 사용
16 데이터 저장과 사용16 데이터 저장과 사용
16 데이터 저장과 사용운용 최
 
15 content provider
15 content provider15 content provider
15 content provider운용 최
 
14 broad castreceiver
14 broad castreceiver14 broad castreceiver
14 broad castreceiver운용 최
 
13 service 좀더
13 service 좀더13 service 좀더
13 service 좀더운용 최
 
11 tablet 대응 가이드
11 tablet 대응 가이드11 tablet 대응 가이드
11 tablet 대응 가이드운용 최
 
10 view orientation_change
10 view orientation_change10 view orientation_change
10 view orientation_change운용 최
 
09 android keyboard & layout
09 android keyboard & layout09 android keyboard & layout
09 android keyboard & layout운용 최
 
07 다양한 device_대응_방법
07 다양한 device_대응_방법07 다양한 device_대응_방법
07 다양한 device_대응_방법운용 최
 
05 pending intent
05 pending intent05 pending intent
05 pending intent운용 최
 

Plus de 운용 최 (20)

Wot(daliworks) 20131113
Wot(daliworks) 20131113Wot(daliworks) 20131113
Wot(daliworks) 20131113
 
NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08
 
Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"
 
Uml intro 1
Uml intro 1Uml intro 1
Uml intro 1
 
Uml intro 0
Uml intro 0Uml intro 0
Uml intro 0
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 
18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상
 
19 나만의 view 만들기
19 나만의 view 만들기19 나만의 view 만들기
19 나만의 view 만들기
 
17 adapter view & db
17 adapter view & db17 adapter view & db
17 adapter view & db
 
16 데이터 저장과 사용
16 데이터 저장과 사용16 데이터 저장과 사용
16 데이터 저장과 사용
 
15 content provider
15 content provider15 content provider
15 content provider
 
14 broad castreceiver
14 broad castreceiver14 broad castreceiver
14 broad castreceiver
 
13 service 좀더
13 service 좀더13 service 좀더
13 service 좀더
 
11 tablet 대응 가이드
11 tablet 대응 가이드11 tablet 대응 가이드
11 tablet 대응 가이드
 
10 view orientation_change
10 view orientation_change10 view orientation_change
10 view orientation_change
 
09 android keyboard & layout
09 android keyboard & layout09 android keyboard & layout
09 android keyboard & layout
 
08 font size
08 font size08 font size
08 font size
 
07 다양한 device_대응_방법
07 다양한 device_대응_방법07 다양한 device_대응_방법
07 다양한 device_대응_방법
 
05 pending intent
05 pending intent05 pending intent
05 pending intent
 

02 activity.lifecycle

  • 2. Activity란.. • 가장 쉬운 이해는 "화면" 하나이다. o 사실은 Activity가 화면을 가질 수 있는 것이며, Activity는 화면 구성 외 에 사용자 입력과 Event들을 접목 시키는 controller 역할을 많이 한다. o 화면을 가지지 않는 Activity는 어찌 보면 Service라고 볼 수도 있지만, 의외로 화면 밝기 조 정을 위한 Activity와 같이 화면을 가지지 않는 Activity들이 있습니다. 또는 다운로드를 잠시 하면서 화면을 얼려두고 싶은 경우와 같은 경우가 있을 수 있습니다. 이와 같은 추가적인 사 용 예는 구글에서 "android activity no UI"로 검색하면 찾으실 수 있습니다. • 프로그램은 한 화면에서 모든 동작이 수행이 힘들기 때문에 여러 Activity로 구성이 되고 이들 간에는 서로 통신을 해야 합니다. • Activity들은 자체적인 Lifecycle을 가지고 있으며, 각 단계에 대한 callback을 지정해서 원하는 동작을 취하게 할 수 있습니다.
  • 3. Activity 생명 주기 생명 주기에 대한 정확한 이해가 필수! 대부분 개발과정에서 미세한 버그들은 이러 한 생명 주기에 대한 고려가 없는 경우가 대 부분입니다. 게다가 생명 주기는 프로그래머가 강제할 수 는 없습니다. 단지 요청을 할 뿐. 실제 모든 생명 주기 관할은 Android OS 수준에서 일 어납니다(수행이 됩니다.). 이는 다시 이야기 하면, 프로그래머가 원하 지 않는 시점에도 생명이 마쳐질 수 있는 상 황이 있다는 사실 입니다. 대표적인 경우가 메모리가 부족한 경우입니 다. 위 생명 주기를 자세히 보기 전에 Activity 상태에 대해서 먼저 살펴 봅니다.
  • 4. Activity 상태 • 실행 (active, running) o 사용자가 현재 사용 중인 상태. 스택의 제일 위에 있으며, 화면 상에서 도 제일 위에 있다. 입력 포커스를 가지며, 사용자 입력을 처리를 담당 합니다. • 일시정지 (pause) o 포커스는 잃었지만 사용자에게는 보이는 상태. 위쪽에 다른 Activity가 있지만 화면 전체를 가리지는 않고 반투명 상태가 이에 해당. 살아는 있 지만, 경우에 따라서 시스템에 강제 종료 가능 상태. • 정지 (stopped) o 다른 Activity에 의해서 완전히 가려진 상태, 사용자 눈에 보이지 않습니 다. 그러나 메모리 상에 기존 상태를 유지하고 있어서, 필요에 따라서 다시 활성화 되어 화면에 나타날 수 있습니다. 물론 이 상태도 시스템에 의해서 강제 종료 가능합니다.
  • 5. 처음 생성이 될 때. (생성 의미는 메모리에~) 다른 Activity가 현재 Activity위에 잠시 떳다 가 사라져서 원래 Activity가 보이는 경우에 도 onResume 다시 화면에 올라오는 경우는 대부분 여기서 처리를 하는 것이 대부분. onStart 보다는 onResume을 많이 활용. onCreate onResume onPause 습관적으로 고민을 해야 하는 callback killable status
  • 6. onPause onPause가 호출되면서 부터 Paused 상태가 된다는 것은. Killable status로 진입이 된다는 이야기입니다. 이 시점 이후로는 시스템이 언제나 필요에 따라서 해당 Activity를 별도 신호 없이 메모리에서 소멸 시켜 버릴 수 있다는 이야기 입니 다. 여기서 별도 신호가 없다는 이야기는 onStop, onDestroy가 호출 이 되지 않는다는 이야기가 됩니다. 즉 onPause는 생명주기의 마지막 보장된 정리 타임이라고 할 수 있습니다. 그렇기에 우리는 이 부분에서 해당 Activity에 대한 정리 를 열심히 해야 합니다.
  • 7. onPause에 대해서 예제를 통한 추가 조사. A B C B.finish() A.finish() App 실행 startActivity(B) startActivity(C) C.finish() 각 단계에 대해서 lifecycle callback 로그 남김 아래 순서에 따라서 동작을 수행하고 로그를 추적 1. App 실행 2. startActivity(B) 3. B.finish() 4. startActivity(C) 5. C.finish() 6. A.finish() 여기서 B는 일반 Activity. C는 배경이 투명인 Activity * 배경 투명 Activity는 android:theme="@android:style/Theme.Translucent.NoTitleBar" 설정 통해서 간단 지정 가능
  • 8. onPause 실험 결과 1. App 실행 a. A onStart b. A onResume 2. startActivity(B) a. A onPause b. B onStart c. B onResume d. A onStop 3. B.finish() a. B onPause b. A onRestart c. A onStart d. A onResume e. B onStop f. B onDestroy 4. startActivity(C) a. A onPause b. C onStart c. C onResume 5. C.finish() a. C onPause b. A onResume c. C onStop d. C onDestroy 6. A.finish() a. A onPause b. A onStop c. A onDestroy
  • 9. onPause 에 대한 에매한 부분에 대한 정의 • onPause는 Activity가 stopped 상태로 전환하기 전에 무조건 호 출이 된다. • Activity가 배경이 투명한 Activity가 뜨는 경우에는 기존 Activity 는 onPause 상태가 유지가 됩니다. o 여기서 배경이 투명한 Activity라고 함은 Dialog는 절대 아님 을 명심합니다. o 투명한 Activity 때문에 onPause에서 onStop으로 이동하지 않고, onStop에 머물러 있는 상태가 유지 됩니다. • onPause 구현은 가능한 빠르게 실행되도록 합니다. 새로 올라오 는 화면의 onStart/onResume이 전 화면의 onPause가 마쳐져야 시작되기 때문입니다.
  • 10. saveInstanceState 액티비티의 상태를 저장 및 복원하는 콜백 메소드 onSaveInstanceState, onRestoreInstanceState
  • 11. 이건 한 번 해보고 가자 1. Activity 하나에 각종 callback들을 재정의하고 Log를 남 겨서 실제 언제 callback이 수행이 되는 가를 확인하자. 2. Activity를 두개를 만들어서 a. 첫 번째 Activity에서 버튼 클릭해서 두번째 Activity를 생성을 하자. b. 두 번째 Activity에서 닫기 버튼을 만들어서 다시 원래 Activity로 돌아오자. c. 두 Activity 모두에 callback들을 정의해서, 언제 호출 이 일어나는 가를 확인하자.