안드로이드

시작 모드(launch) 정의하기

raulyo 2015. 5. 14. 09:29

시작 모드(launch) 정의하기 

(1) 매니페스트 파일 사용

   1) standard - 그 task에서 액티비티 생성한다. 

   2) singletop - 그 task의 top에 있는 액티비티를 재사용한다.(onNewIntent호출)

   3) singletask - 그 task에 있는 액티비티 재사용

                       그 task에는 다른 액티비티도 허용되지만 그 액티비티는 오직 하나만 허용된다.  

   4) singleinstance - 하나의 액티비티에 대한 객체는 오직 하나, 자신이 속한 태스크는 오직 자신만 허용된다. 

(2) 인텐트 플래그 사용하기 

   1) FLAG_ACTIVITY_NEW_TASK - 액티비티의 객체가 존재하지 않으면 새 태스크의 ROOT에 새 객체가 들어간다. 이미 객체가 존재했다면 전면으로 

가져와 마지막 상태를 복구하고 onNewIntent를 호출한다. 하지만 후면의 태스크에 top에 있는 액티비티가 실행되므로 실행하고자 했던 액티비티와 

실행된 액티비티가 다를 수 있다. 그래서 FLAG_ACTIVITY_CLEAR_TOP이랑 같이 사용한다. 

   2) FLAG_ACTIVITY_CLEAR_TOP - 존재하면 그 액티비티위에 있는 것 모두 제거 

(3) 친밀도(affinity) 다루기 

   - 액티비티가 어떤 태스크에 속하고 싶은지 지정할 수 있다. 

   1) 액티비티를 실행할려는 인텐트에 FLAG_ACTIVITY_NEW_TASK가 포함되어 있다면 그 액티비티와 친밀도가 같은 태스크를 찾는다. 존재하면 그 태스크

   에 액티비티를 넣고 존재하지 않으면 새 태스크를 생성한다. 

   2) <activity> allowTaskReparenting 속성값이 true이면 액티비티가 현재는 자신이 시작된 태스크에 있을지라도 자신과 친밀도가 같은 태스크가 

     전면으로 나올때 그 태스크로 이동할수 있다. 

   3) 백스택 비우기 - 사용자가 오랜시간을 태스크에 벗어나 있다면 root빼고 모두 제거된다.

      alwayRetainTaskState - true : 오랜시간이 지나도 액티비티를 제거하지 않고 유지        

      clearTaskOnLaunch - true : 사용자가 이 task에서 벗어나 다시 돌아오면 root만 남기고 모두 제거한다. 

      finishOnTaskLaunch - true : 액티비티가 태스크를 벗어낫다 다시 돌아온 경우 제거된다.