Search Results

Search Results for '태스크' : 2 POSTS

  1. 2010.08.19 태스크란? (Task, Activity Stack)
  2. 2010.08.13 액티비티란? (Activity)

태스크란? (Task, Activity Stack)



안드로이드 태스크란? (Android Task, Activity Stack)

-  Task는 어플리케이션에서 실행되는 액티비티를 보관하고 관리하며 Stack형태의 연속된 Activity로 이루어진다

- 선입후출(First In Last Out)형태로 나중에 적재된 액티비티일 수록 가장 먼저 사용된다
  만약 1페이지>2페이지>3페이지 순으로 액티비티를 이동했을때 실행순서대로 Task에 push해 놓았다가
  back버튼을 누르면 3페이지>2페이지>1페이지순으로 Task에서 pop시켜 되돌아 간다고 생각하면 된다

- 서로 다른 어플리케이션간의 이동에도 Task를 이용해 사용자 경험(UX)를 유지시켜 준다

- 최초적재 액티비티는 Root Activity 라고 하며 어플리케이션 런처로부터 시작된다

- 마지막으로 적재되는 액티비티는 Top Activity 라고 하며 현재 화면에 활성화 되어있는 액티비티를 말한다

- Task내에는 서로 다른 어플리케이션의 액티비티들이 포함될 수 있어 어플리케이션에 경계없이 
  하나의 어플리케이션인것 처럼 보이게 해준다

- Task의 Stack내에 존재하는 액티비티들은 모두 묶여서 background와 foreground로 함께 이동한다
  홈버튼 클릭(task interrupt => background 이동), 홈버튼 롱클릭(recent task => foreground 이동)

- Flag를 사용하여 Task내 액티비티의 흐름을 제어할 수 있다


어피니티란? (Android Affinity)

- 어플리케이션 내의 액티비티들은 하나의 어피니티를(affinity:친화력) 가지고 있다

- AndroidManifest 에서 <activity> 요소의 taskAffinity 속성을 사용해 개별 affinity가 지정 가능하다

- FLAG_ACTIVITY_NEW_TASK 플래그를 가진 인텐트 객체로 부터 호출된 allowTaskReparenting 속성을
  True로 가지고 있는 액티비티에 한해 affinity가 동작한다

- 위 조건이 만족한 상황에서 시작된 액티비티는 자신과 동일한 어피니티를 갖는 태스크가 있을경우
  해당 태스크로 이동한다

- 즉, [b]어피니티를 가진 A액티비티가 호출되어 해당 태스크에 속해있을때 [b]어피니티를 가진 태스크가
  호출되면 A액티비티는 [b]어피니티를 가진 태스크로 이동한다

- 어피니티에 의해 태스크가 이동된 후에 back버튼으로 반환시 원래 해당하던 태스크로 돌아간다

- 하나의 어플리케이션내에서 하나 이상의 기능을 갖는 어플리케이션이 존재할경우 각 액티비티별로 다른
  어피니티를 지정해 관리할 수 있다


플래그란? (Android Flag)

- AndroidManifest 에서 플래그를 사용할때에는 <activity> 요소의 launchMode 속성을 사용하며
  launchMode에서 사용가능한 속성은 다음과 같이 4가지만 가능하다

  standard: 
  스택중 어느곳에나 위치 가능하며 여러개의 인스턴스가 생성가능하다

  singleTop: 
  스택중 어느곳에나 위치 가능하며 여러개의 인스턴스가 생성가능하고 호출한 activity와 현재
  최상위 activity가(top activity) 동일한 경우 최상위 activity가 재사용 된다(기존 최상위 activity는 pop)

  singleTask: 
  루트 액티비티로만 존재하며 하나의 인스턴스만 생성가능하다(타 task에서 동일 activity 사용불가)
  다른 액티비티 실행시 동일 Task내에서 실행이 가능하다
 
 singleInstance: 루트 액티비티로만 존재하며 하나의 인스턴스만 생성가능하고 태스크내에 해당
  액티비티 하나만 속할 수 있어
 다른 액티비티를 실행시키면 새로운 Task가 생성되어
  (FLAG_ACTIVITY_NEW_TASK와 동일) 그 Task내에 포함된다


- 소스코드에서 플래그를 사용하고 싶을때에는 Intent에 addFlags() 또는 setFlags() 메소드를 사용한다

  FLAG_ACTIVITY_NEW_TASK:
  동일 affinity의 task가 있으면 그곳에 실행되고 아니면 새로운 task를 실행

  FLAG_ACTIVITY_SINGLE_TOP:
  상단 singleTop과 같으며, 실행시 재사용 액티비티의 실행은 onPause(), onNewIntent(), onResume()
  순으로 호출된다
  ☞ [B]를 single top설정: [A][B] 상태에서 [B] 호출시 => [A][재사용된B]
  ☞ [B]를 single top설정: [B][A] 상태에서 [B] 호출시 => [B][A][B]

  FLAG_ACTIVITY_NO_HISTORY:
  해당 액티비티는 재활성화시(back키를 눌러 다시 활성화될때) pop 된다
  ☞ [B]를 no history설정: [A][B][A] 상태에서 back키 사용시 [A]가 pop 되고 [B] 역시
  no history에 의해 pop => [A]

  FLAG_ACTIVITY_REORDER_TO_FRONT:
  activity 호출시 이미 같은 activity가 task내에 있으면 같은 activity는 pop 시키고 해당 activity가 push 된다
  ☞ [A]를 reorder to front설정: [A][B] 상태에서 [A] 호출시 같은 activity인 [A]가 pop되고 => [B][A]

  FLAG_ACTIVITY_CLEAR_TOP:
  해당 task에 있는 모든 activity를 pop 시키고 해당 activity가 root activity로 task에 push된다
  ☞ [A]를 clear top설정: [A][B] 상태에서 [A] 호출시 모두 pop되고 => [A]
  단, 해당 플래그는 액티비티를 모두 onDestroy() 시킨 후 새롭게 onCreate() 시키기 때문에 [A]를
  유지하려면 FLAG_ACTIVITY_SINGLE_TOP 플래그와 함께 사용하면 된다

http://developer.android.com/reference/android/content/Intent.html
#FLAG_ACTIVITY_BROUGHT_TO_FRONT


Clear Task

- Task를 오랫동안 사용하지 않고 방치해 두면 시스템은 Root Activity를 제외한 모든 액티비티를 Clear 시킨다
- 이러한 동작은 Activity의 속성을 수정하여 제어할 수 있다

  alwaysRetainTaskState:
  Task의 Root Activity에 true로 설정되어 있다면 상단에 언급되었던 동작은 발생하지 않으며 Task는
  오랜 시간 이후에도 Stack에 있는 모든 Activity를 유지한다

  clearTaskOnLaunch:
  이 속성이 true로 설정되어 있으면 alwaysRetainTaskState 와 정반대로 사용자가 Task를 떠났다가
  다시 돌아올 때마다 항상 Stack은 Root Activity로 정리된다

  finishOnTaskLaunch:
  이 속성은 clearTaskOnLaunch와 유사하지만 전체 Task가 아닌 단일 Activity에서 동작한다
  그리고 그것은 Root Activity를 포함한 어떤 Activity가 사라지는 원인이 될 수도 있다
  true로 설정되어 있을 때, Activity는 현재 Session 동안 Task의 일부만 유지한다
  만일 사용자가 해당 Task를 벗어났다가 다시 돌아오면 더이상 존재하지 않는다

Comments List

  1. Comment List
비밀글

액티비티란? (Activity)



안드로이드 액티비티란? (Android Activity)

- 사용자 인터페이스를 구성하는 기본 단위이며 보통 하나의 화면이 하나의 액티비티라고 봐도 무방하다

- 액티비티 매니저에(Activity Manager-AndroidManifest 를 참조하여 관리) 의해 관리되며
  Activity Class를 상속 받아 구성한다

- 한개 이상의 레이아웃과 뷰, 이벤트로 구성되며 한개 이상의 액티비티를 모아
  응용프로그램을(Application) 구현할 수 있다

- 런쳐(Application Launcher) 에 의해 호출되며 (AndroidManifest 내에 정의) 다른 액티비티를 호출할 수 있다 
  (startActivity, startActivityForResult 메소드에 의해 호출되며 onActivityResult 메소드에 의해 결과를 받는다)

- finish 메소드로 종료할 수 있으며 startActivityForResult로 호출한 액티비티를
  종료시키고자 할때는 finishActivity 메소드를 이용한다

- 액티비티를 호출할때에는 인텐트를(Intent) 사용하며 호출한 액티비티는 태스크에(Task) 차곡 차곡 쌓인다

- 액티비티는 생명주기를(LifeCycle) 갖는다

- 액티비티는 연관성을(Affinity) 갖는다

Comments List

  1. Comment List
비밀글