관련된 실행 액티비티들을 순서대로 묶어 관리하는 것
이 Task 제어가 필요한 이유는 여러 액티비티들이(중복되어) 스택 위에 들어왔을 때, 어떤 시점에서 뒤로 가기를 누르면 바로 전 액티비티가 아닌, 더 앞 지점으로 가야하는 경우가 있기 때문이다.
standard : activity 중복 허용하면서 task에 쌓임
singleTop : task 내의 top activity와 동일한 액티비티를 실행하면 기존의 것을 재사용
가장 윗단의 액티비티가 자기 자신을 intent로 부르면 스택에 쌓지 않고 재사용하는 것이다.
activity의 시작점이 intent를 받는 부분이므로 재사용 시 전달되는 intent를 활용하는 방법이 필요하다.
onNewIntent(Intent intent)를 오버라이딩 하여 이를 새로운 인텐트가 들어왔음을 감지하여 실행한다.
singleTask : 모든 activity들이 중복될 경우 중복 허용하지 않고 재사용
singleInstance : 중복 허용 x, 혼자서 별도의 task를 구성
이 설정은 manifest로 애초부터 할 수도 있고, intent flag를 이용해서 runtime에 그때 그때 설정할 수도 있다.
<activity android:name=".Banking2Account" android:label="계좌조회"/>
<!--<activity android:name=".Banking2Account" android:label="계좌조회" android:launchMode="singleTop"/>-->
<!--<activity android:name=".Banking2Account" android:exported="true" android:label="계좌조회" android:launchMode="singleTask"/>-->
<!--<activity android:name=".Banking2Account" android:exported="true" android:label="계좌조회" android:launchMode="singleInstance"/>-->
manifest에서
<activity android:name=".SubActivity1" android:noHistory="true"/>
위와 같이 속성으로 설정할수도 있고
(noHistory란 taskstack 에 쌓지 않는다는 의미)
binding.btnCallSub1.setOnClickListener {
// val intent = Intent(this, SubActivity1::class.java)
// startActivity(intent)
val intent = Intent(this, SubActivity1::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NO_HISTORY
}
startActivity(intent)
}
코드상으로 flag로 작성할 수도 있다.
둘 다 모두 subActivity를 no history로 하겠다는 의미이다.
FLAG_ACTIVITY_NO_HISTORY (==noHistory) : task stack에 쌓지 않음
FLAG_ACTIVITY_CLEAR_TASK : task내에서 다른 액티비티 모두 삭제함 (이 flag로 시작한 액티비티는 뒤로 가기 누르면 종료 됨)
FLAG_ACTIVITY_CLEAR_TOP : 기존에 있던 액티비티 제거하고(상위 포함) 새로운 액티비티 생성
Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
을 쓰면 기존의 액티비티가 나올때까지 상위 액티비티들을 재사용하고 기존 액티비티를 재사용한다.
등등 flag 종류는 많이 있다.