http://developer.android.com/guide/components/tasks-and-back-stack.html


위 내용을 내맘대로 정리

보는사람 음스므로 음슴체


<Tasks and Back Stack>


- application은 여러개의 activity를 가짐 

- activity는 다른 app의 activity를 실행시킬수 있음

- 어떤 하나의 job을 수행했을때 사용자와 상호작용하는 activity들의 모임 -> task

- 이 activity들은 back stack이라 불리는 stack에 오픈된 순서대로 배열됨

- home 화면은 대부분의 task의 start 지점이 됨

- 사용자가 app런처 아이콘 또는 홈화면의 shortcut을 클릭해서 실행하면 그 app의 task가 앞으로 나오게 됨

- app의 task가 최근에 사용된 적이 없으면 새 task가 생성되고 그 app의 main activity가 task의 root가 됨


- 현재 앞에 있는 activity A 가 다른 activity B 를 실행시킴 

- 실행된 activity B는 stack의 top으로 가고 focus를 가지게 됨

- 이전 activity A는 stack에 남아있게 되고 stop됨 

- activity가 stop되면 시스템은 ui 상태를 유지함

- 사용자가 back 버튼을 누르면 stack의 top에 있던 activity B는 pop되고 destroy됨

- 앞에 있던 activity A가 resume되고 ui 상태 복구됨

- task안에 있는 activity들은 결코 재배치 되지 않음

- 오직 stack의 last in, first out의 원칙에 따라 push, pop될뿐임


Figure 1. activity가 back stack에 들어가고 빠지고 하는거 



- 사용자가 계속 back 버튼을 누르면 홈 화면에 갈때까지 stack안에 있는 있는 activity들은 차례로 pop됨

- stack에서 모든 activity가 제거되면 task는 더이상 없는게 됨


- task는 결합된 단위임(뭔소린지 모르겠으니 영어원문 : a cohesive unit)

- 사용자가 다른 새 task를 시작하거나 홈으로 가면 기존에 foreground에 있던 task는 background로 옮겨짐

- background에 있는동안 그 task에 있는 모든 activity들은 당근 stop상태

- back stack은 task들을 온전히 유지시킴

- task는 다른 task가 foreground에 있을 동안 단지 포커스를 잃을뿐


Figure 2. 두개의 task - task B는 foreground 에서 사용자랑 샤바샤바 하고 있고 그동안 task A는 background에서 resume되길 기다릴뿐..


- 사용자가 background에 있는 task를 pick up하면 당연 foreground로 옴

- 예를들어

- 현재 3개의 activity를 가진 task A가 있음

- 사용자가 홈버튼을 누르고 다른 app을 실행시킴

- 시스템은 새로 실행된 app의 새 task B를 시작시킴 

- 다시 홈으로 와서 task A로 실행되어 있는 app을 실행시킴

- 그럼 당근 task A가 foreground로 옴

- 그러니 task A에 있는 3개의 activity는 stack의 top으로 오고 resume됨 (당연 젤 위에 있는 activity만 resume됨)

- 여기서 사용자는 다시 홈으로 가서 task B의 app 을 시작할수 있음 

- 이것이 multi tasking임 


- 여기서 한번더 강조 back stack에 있는 activity들은 재배열 될 수 없음 (즉 중간에 있던 activity가 top으로 온다거나 못함) 

- 사용자가 한 activity를 실행시키면 새 instance가 생성되고 stack의 top으로 들어감

- app의 activity는 여러 시점에서 instance화 될수 있음 (multiple instances)

- 같은 activity가 각각 여러개의 instance로 생성되서 각각 다른 상태로 stack에 쌓일 수 있음

- 그런데 여러 instance로 되게 하기 싫으면 설정 수정하면됨 


Figure 3. 하나의 activity는 여러번 instance화 됨


* activity와 task의 기본 동작 다시 정리 

- activity A가 activity B를 실행시키면 activity A는 stop됨

- 시스템은 stop된 activity A의 상태들(스크롤 포지션이라던가 폼에 입력되어있는 text라던가)을 유지함

- activity B가 앞에 있는 상태에서 사용자가 back버튼을 누르면 activity A가 resume됨

- 사용자가 홈 버튼을 눌러서 task를 빠져나오면 수행되고 있던 activity는 stop되고 task는 background로 감

- 시스템은 task내의 모든 activity들의 상태를 유지함 

- 사용자가 app런처 아이콘 눌러서 다시 실행시키면 그 app의 task는 resume되고 foreground로 옴

- stack의 top에 있던 activity도 resume됨

- 사용자가 back버튼을 누르면 실행되고 있던 activity는 stack에서 pop되고 destroy됨

- 이전의 activity가 resume됨

- activity가 destroy될때는 시스템은 activity의 상태 저장하지 않음

- activity는 다른 task에서 여러번 instance화 될 수 있음 


---------------------------------------------------

Saving Activity State는 넘어감

Managing Tasks랑 나머진 담 포스트에.. 헥헥



Posted by 바나나쥬스
TAG