SlideShare a Scribd company logo
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들을 정의해서, 언제 호출
이 일어나는 가를 확인하자.

More Related Content

PPTX
Ngui3 5 5_example_5_기타정리
PPTX
마말레이드 GUI PPT입니다.
PPT
News report
DOC
Untitled
PDF
linux1
PPT
Maternity thru Families
PPTX
Lisa sessions at art sv.sf
PPT
Prayer tools dec 16, 2012
Ngui3 5 5_example_5_기타정리
마말레이드 GUI PPT입니다.
News report
Untitled
linux1
Maternity thru Families
Lisa sessions at art sv.sf
Prayer tools dec 16, 2012

Similar to 02 activity.lifecycle (7)

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

More from 운용 최 (20)

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

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들을 정의해서, 언제 호출 이 일어나는 가를 확인하자.