• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
06 activity stack and back, flag
 

06 activity stack and back, flag

on

  • 648 views

 

Statistics

Views

Total Views
648
Views on SlideShare
648
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    06 activity stack and back, flag 06 activity stack and back, flag Presentation Transcript

    • Activity Stack And Back / Flaghttp://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가 하나만 있는 것이라 생각이 되겠지만, 아래 그림과 같은 모습이 되는 것이죠.AAAActivity StackstartActivity(Context, A.class);Hist #2Hist #3Hist #1startActivity(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가 꼬입니다.)• standardo activity의 multi-instance 허용하며, lauch 될 때 마다 instance 생성되어, stack 최상단에위치함. 기본 설정.• singleTopo activity의 multi-instance는 허용하지만, 동일 Activity가 target task의 top에 존재하면, 생성을 새로이 하지 않고, onNewIntent 호출을 합니다.o 생명 주기 상으로는 onPause > onNewIntent > onResume 순으로 호출• singleTasko device 당 1개의 activity instance를 허용하며, task의 root가 되어 다른 activity가 자신의위에 쌓이는 것을 허락한다.• singleInstanceo device 당 1개의 activity instance를 허용하며, task의 root가 되며, 다른 activity와 task를공유하지 않습니다. (FLAG_ACTIVITY_NEW_TASK와 유사)
    • Task 분리가 가능? 언제?앞서 살펴 본 바에 따르면, Task라는 형태로 흐름을 별도로 분리가 가능함을 알 수 있습니다.그런데, 왜 그러한 경우가 필요할까요?이러한 경우에 대한 예제로 쉽게 생각이 가능한 경우가 메신저 App들을 생각할 수 있습니다.메신저 App을 통해서 여러 개 대화방을 만드는 경우에.Dashboard 역할 하는 것 자체가 하나의 Task이며, 대화방이 하나씩 생성이 될 때에 이들은 각각이하나의 Task가 되는 형태로 구현이 가능합니다.각 대화방은 메신저 App의 한 부분이면서도, 독립적인 작업이며 이렇게 동작하게 하도록 하기 위해서 우리는 별도 Task를 분리할 수 있게 됩니다.
    • TaskTask == Activity StackTask는 메모리상에 여러 개가 동시에 존재 가능하며, 서로 독립적입니다.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