카테고리 없음

activity launch Mode

hik14 2021. 5. 20. 20:13

LaunchMode

- Activity 를 시작하는 방법을 설정한다.

- Intent 를 처리하기 위해 Activity 호출할 때 발생하는 것을 결정하기 위해 Intent 객체에서 액티비티 플래그(FLAG_ACTIVITY_* 상수)와 함께 작동하는 4개의 모드가 있다.

 

Activity 생성하고 새로운 인스턴스를 만드는 경우 intent를 사용한다.

 startActivity()로 연결해서 만들어버릴 수도 있겠지만, 인텐트에 flag 값을 설정하여 액티비티를 만들 수도 있습니다.

 

Intent intent = new Intent(this, SubActivity.class);

intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

Intent intent = new Intent(this, SubActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

 

 

standard

- 디폴트 모드 

- 여러 객체 생성 가능

- 인스턴스는 startActivity()를 호출한 작업에서 시작

singleTop

- 여러 객체 생성 가능

단, 해당 객체가 있는  Task 스택 상단에 이미 해당 액티비티의 기존 인스턴스가 있는 경우, 해당 인스턴스가 새 인텐트를 수신하게 된다,

onNewIntent() 호출에서) 새 인스턴스가 생성되지 않는다.

다른 상황으로는  "singleTop" Activity 기존 인스턴스가 스택 상단이 아니라 대상 작업에 있는 경우

 스택 상단에 있지만 해당 작업에는 없는 경우, 새 인스턴스가 생성되고 스택에 푸시됩니다. 

- 인스턴스는 startActivity()를 호출한 작업에서 시작

 

Up Navigation에서의 차이.

 

 현재 스택에서 Activity로 up navigation(계층간 뒤로 이동) 하면 상위에 올  Activity의 시작 모드가 동작을 결정합니다

 

상위 Activity의 시작 모드가 singleTop인 경우 (또는 up 인텐트가 FLAG_ACTIVITY_CLEAR_TOP을 포함하는 경우)

상위 액티비티는 스택 상단으로 이동하고 상태는 보존됩니다. 상위 액티비티의 onNewIntent() 메서드가 탐색 인텐트를 수신합니다.

 

상위  Activity의 시작 모드가 standard인 경우 (그리고 up 인텐트가 FLAG_ACTIVITY_CLEAR_TOP을 포함하지 않는 경우)

현재 액티비티 및 그 상위 액티비티가 모두 스택에서 갑자기 사라지며 상위 Activity의 새 인스턴스가 탐색 인텐트를 수신하도록 생성됩니다

 

singleTask" 및 "singleInstanceActivity 단일 작업만 시작할 수 있습니다.

singleTask singleInstance 대부분의 애플리케이션에 적합하지 않습니다. 왜냐하면 해당 모드는 사용자에게 친숙하지 않고 대부분의 다른 애플리케이션과 매우 다른 상호작용 모델을 사용하기 때문입니다. 나중에 필요하면 따로 학습한다.