activity launch Mode
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" 및 "singleInstance" Activity 단일 작업만 시작할 수 있습니다.
singleTask와 singleInstance는 대부분의 애플리케이션에 적합하지 않습니다. 왜냐하면 해당 모드는 사용자에게 친숙하지 않고 대부분의 다른 애플리케이션과 매우 다른 상호작용 모델을 사용하기 때문입니다. 나중에 필요하면 따로 학습한다.