SlideShare uma empresa Scribd logo
1 de 10
Activity Stack And Back / Flag
http://developer.android.com/guide/components/tasks-and-back-stack.html
Activity Stack에 쌓이기
Activity를 start하는 것은 기본 동작은 Activity를 하나의 Stack에 쌓는 동작
이며, 최 상단에 있는 Activity가 화면에 노출되는 것이라고 생각할 수 있습
니다.
여기서 쌓이는 stack을 보통 UI Stack이라고 합니다. 예를 들어서 A에서
startActivity를 3회 호출하게 되면, 3개의 Activity가 Activity Stack에 쌓이
고 마지막 A만 화면에 보이는 것입니다. 일반적으로 A가 하나만 있는 것이
라 생각이 되겠지만, 아래 그림과 같은 모습이 되는 것이죠.
A
A
A
Activity Stack
startActivity(Context, A.class);
Hist #2
Hist #3
Hist #1
startActivity(Context, A.class);
Activity Stack 현황 확인하기
Activity Stack에 실제로 쌓인 모습을 보고 싶은 생각이 듭니다. 왠지 매번
그렇다라고 이야기만 들었기 때문에, 눈으로 보는 것이 가장 좋겠지요.
이를 위해서 console에 아래와 같은 명령어를 실행합니다.
adb shell dumpsys activity
위 명령어를 통해서 나오는 내용 중에서, Activity Stack이라는 항목 중에
서 Task Record 중에서 우리가 만든 package name이 명시되어 있는
Task를 찾아보면, 해당 Activity Stack에 쌓인 Activity들이 Hist #n 형태로
표시가 됩니다. 숫자가 높을 수록 상단에 위치합니다.
실제 결과로 확인하기로 합니다.
navigate back
안드로이드는 Hardware에서 Back 기능을 수행할 수 있습니다.
이러한 경우에 Activity Stack에서는 최상단의 Activity (현재 Activity)가 Destroy되고, Stack에
서 바로 아래에 있던 Activity가 Resume되면서 화면 상에 표시하게 됩니다.
참고. Back Navigation 제어하기
Flag 통한 Activity Stack 조정
Activity 자체에 해당 Activity가 뜨는 방법을 아래와 같이 Flag를 설정해서 제어가 가능합니다.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
여기서 자주 사용되는 Flag에 대해서 간단히 알아보도록 합니다.
lauchMode 값과 Flag
앞서 살펴본 바와 같이 Activity start 시키는 intent에 Flag를 지정해서 호출할 수도 있지만, 필요에 따
라서는 manifest 파일에 정의된 activity의 launchMode 값에 값을 지정해서 Activity가 stack 상에 노출
되는 방법도 제어가 가능합니다. 빨간색은 비권장. (정확한 이해 없을 경우 UX가 꼬입니다.)
• standard
o activity의 multi-instance 허용하며, lauch 될 때 마다 instance 생성되어, stack 최상단에
위치함. 기본 설정.
• singleTop
o activity의 multi-instance는 허용하지만, 동일 Activity가 target task의 top에 존재하면, 생
성을 새로이 하지 않고, onNewIntent 호출을 합니다.
o 생명 주기 상으로는 onPause > onNewIntent > onResume 순으로 호출
• singleTask
o device 당 1개의 activity instance를 허용하며, task의 root가 되어 다른 activity가 자신의
위에 쌓이는 것을 허락한다.
• singleInstance
o device 당 1개의 activity instance를 허용하며, task의 root가 되며, 다른 activity와 task를
공유하지 않습니다. (FLAG_ACTIVITY_NEW_TASK와 유사)
Task 분리가 가능? 언제?
앞서 살펴 본 바에 따르면, Task라는 형태로 흐름을 별도로 분리가 가능함을 알 수 있습니다.
그런데, 왜 그러한 경우가 필요할까요?
이러한 경우에 대한 예제로 쉽게 생각이 가능한 경우가 메신저 App들을 생각할 수 있습니다.
메신저 App을 통해서 여러 개 대화방을 만드는 경우에.
Dashboard 역할 하는 것 자체가 하나의 Task이며, 대화방이 하나씩 생성이 될 때에 이들은 각각이
하나의 Task가 되는 형태로 구현이 가능합니다.
각 대화방은 메신저 App의 한 부분이면서도, 독립적인 작업이며 이렇게 동작하게 하도록 하기 위해
서 우리는 별도 Task를 분리할 수 있게 됩니다.
Task
Task == Activity Stack
Task는 메모리상에 여러 개가 동시에 존재 가능하며, 서로 독립적입니다.
Task 안에 있는 Activity는 다름 App에 있는 Activity도 포함이 될 수도 있습니다.
안드로이드는 Application 위에 있는 Task들이 병행 존재하는 형태라고 이해할 수 있습니다.
Task를 분리할 수 있기 때문에, 동일 인스턴스지만,
소속된 Task가 다를 수 있고, 각기 다른 상태를 유지할 수 있는 경우들이 있습니다.
예 )잠시 지도로 위치를
보게 startActivity로 호출
참고 자료
• http://mydevromance.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4
%EB%93%9C-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-
%EC%8A%A4%ED%83%9D-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-Activity-
Stack-View
• http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=android&wr_id=28
• http://surprisen.egloos.com/2511530
• http://theeye.pe.kr/entry/references-of-intent-flag-on-android-activities
• 이지스퍼블리싱. 정재곤 지음. 안드로이드 앱 프로그래밍. 02 애플리케이션 구성하기. Page 202 ~
211.
• http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
• http://nuninaya.tistory.com/569

Mais conteúdo relacionado

Semelhante a 06 activity stack and back, flag

HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
02 activity.lifecycle
02 activity.lifecycle02 activity.lifecycle
02 activity.lifecycle운용 최
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드Sukjoon Kim
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)Hankyo
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조Wanbok Choi
 

Semelhante a 06 activity stack and back, flag (7)

HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
02 activity.lifecycle
02 activity.lifecycle02 activity.lifecycle
02 activity.lifecycle
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조04 안드로이드 응용프로그램의 구조
04 안드로이드 응용프로그램의 구조
 

Mais 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운용 최
 

Mais 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
 

06 activity stack and back, flag

  • 1. Activity Stack And Back / Flag http://developer.android.com/guide/components/tasks-and-back-stack.html
  • 2. Activity Stack에 쌓이기 Activity를 start하는 것은 기본 동작은 Activity를 하나의 Stack에 쌓는 동작 이며, 최 상단에 있는 Activity가 화면에 노출되는 것이라고 생각할 수 있습 니다. 여기서 쌓이는 stack을 보통 UI Stack이라고 합니다. 예를 들어서 A에서 startActivity를 3회 호출하게 되면, 3개의 Activity가 Activity Stack에 쌓이 고 마지막 A만 화면에 보이는 것입니다. 일반적으로 A가 하나만 있는 것이 라 생각이 되겠지만, 아래 그림과 같은 모습이 되는 것이죠. A A A Activity Stack startActivity(Context, A.class); Hist #2 Hist #3 Hist #1 startActivity(Context, A.class);
  • 3. Activity Stack 현황 확인하기 Activity Stack에 실제로 쌓인 모습을 보고 싶은 생각이 듭니다. 왠지 매번 그렇다라고 이야기만 들었기 때문에, 눈으로 보는 것이 가장 좋겠지요. 이를 위해서 console에 아래와 같은 명령어를 실행합니다. adb shell dumpsys activity 위 명령어를 통해서 나오는 내용 중에서, Activity Stack이라는 항목 중에 서 Task Record 중에서 우리가 만든 package name이 명시되어 있는 Task를 찾아보면, 해당 Activity Stack에 쌓인 Activity들이 Hist #n 형태로 표시가 됩니다. 숫자가 높을 수록 상단에 위치합니다. 실제 결과로 확인하기로 합니다.
  • 4.
  • 5. navigate back 안드로이드는 Hardware에서 Back 기능을 수행할 수 있습니다. 이러한 경우에 Activity Stack에서는 최상단의 Activity (현재 Activity)가 Destroy되고, Stack에 서 바로 아래에 있던 Activity가 Resume되면서 화면 상에 표시하게 됩니다. 참고. Back Navigation 제어하기
  • 6. Flag 통한 Activity Stack 조정 Activity 자체에 해당 Activity가 뜨는 방법을 아래와 같이 Flag를 설정해서 제어가 가능합니다. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 여기서 자주 사용되는 Flag에 대해서 간단히 알아보도록 합니다.
  • 7. lauchMode 값과 Flag 앞서 살펴본 바와 같이 Activity start 시키는 intent에 Flag를 지정해서 호출할 수도 있지만, 필요에 따 라서는 manifest 파일에 정의된 activity의 launchMode 값에 값을 지정해서 Activity가 stack 상에 노출 되는 방법도 제어가 가능합니다. 빨간색은 비권장. (정확한 이해 없을 경우 UX가 꼬입니다.) • standard o activity의 multi-instance 허용하며, lauch 될 때 마다 instance 생성되어, stack 최상단에 위치함. 기본 설정. • singleTop o activity의 multi-instance는 허용하지만, 동일 Activity가 target task의 top에 존재하면, 생 성을 새로이 하지 않고, onNewIntent 호출을 합니다. o 생명 주기 상으로는 onPause > onNewIntent > onResume 순으로 호출 • singleTask o device 당 1개의 activity instance를 허용하며, task의 root가 되어 다른 activity가 자신의 위에 쌓이는 것을 허락한다. • singleInstance o device 당 1개의 activity instance를 허용하며, task의 root가 되며, 다른 activity와 task를 공유하지 않습니다. (FLAG_ACTIVITY_NEW_TASK와 유사)
  • 8. Task 분리가 가능? 언제? 앞서 살펴 본 바에 따르면, Task라는 형태로 흐름을 별도로 분리가 가능함을 알 수 있습니다. 그런데, 왜 그러한 경우가 필요할까요? 이러한 경우에 대한 예제로 쉽게 생각이 가능한 경우가 메신저 App들을 생각할 수 있습니다. 메신저 App을 통해서 여러 개 대화방을 만드는 경우에. Dashboard 역할 하는 것 자체가 하나의 Task이며, 대화방이 하나씩 생성이 될 때에 이들은 각각이 하나의 Task가 되는 형태로 구현이 가능합니다. 각 대화방은 메신저 App의 한 부분이면서도, 독립적인 작업이며 이렇게 동작하게 하도록 하기 위해 서 우리는 별도 Task를 분리할 수 있게 됩니다.
  • 9. Task Task == Activity Stack Task는 메모리상에 여러 개가 동시에 존재 가능하며, 서로 독립적입니다. Task 안에 있는 Activity는 다름 App에 있는 Activity도 포함이 될 수도 있습니다. 안드로이드는 Application 위에 있는 Task들이 병행 존재하는 형태라고 이해할 수 있습니다. Task를 분리할 수 있기 때문에, 동일 인스턴스지만, 소속된 Task가 다를 수 있고, 각기 다른 상태를 유지할 수 있는 경우들이 있습니다. 예 )잠시 지도로 위치를 보게 startActivity로 호출
  • 10. 참고 자료 • http://mydevromance.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4 %EB%93%9C-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0- %EC%8A%A4%ED%83%9D-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0-Activity- Stack-View • http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=android&wr_id=28 • http://surprisen.egloos.com/2511530 • http://theeye.pe.kr/entry/references-of-intent-flag-on-android-activities • 이지스퍼블리싱. 정재곤 지음. 안드로이드 앱 프로그래밍. 02 애플리케이션 구성하기. Page 202 ~ 211. • http://developer.android.com/guide/topics/manifest/activity-element.html#lmode • http://nuninaya.tistory.com/569