안드로이드 Task

: ) YOUNG·2022년 10월 16일
1

안드로이드

목록 보기
2/17
post-thumbnail


Task

  • 관련된 실행 액티비티들을 순서대로 묶어 관리하는 것.

  • 서로 다른 package의 activity가 실행되더라도 하나의 실행 흐름안에 있게 된다.

  • Task는 stack의 형태로 구성됨 (실행된 activity가 쌓이는 구조)

  • 맨 마지막 root activity가 없어지면 task는 완전 종료됨

  • Task 제어는 Activity 실행 모드와 FLAG를 통해서 제어가 가능하다.


Activity 실행 모드의 종료

  • standard : 기본 값으로 task내에 중복된 activity 허용 (default 값임)

  • singleTop : task내에 top activity와 동일한 activity를 실행하면 중복해서 쌓지 않고 기존의 top activity 재사용

  • singleTask : 위치에 상관없이 activity를 재사용해 중복을 허용하지 않음

  • singleInstance : 중복을 허용하지 않을 뿐 아니라 혼자서 별도의 task를 구성한다.

설정은 2가지 방법이 있다. Manifest.xml에 등록해서 동작 방식 자체를 결정할 수 있고, Intent Flag를 통해서는 runtime에 설정하며 그때 그때 다른 값을 지정할 수 있다.


noHistory 속성과 FLAG_ACTIVTY_NO_HISTORY

  • 해당 액티비티는 task stack에 쌓이지 않음

manifest.xml


<activity android:name=".MainActivity" android:noHistory="true/>

MainActivity


binding.btn.setOnClickListener {
	val intent = Intent(this, MainActivity::class.java).apply {
    	flags = Intent.FLAG_ACTIVITY_NO_HISTORY
    }
    startActivity(intent)
}



FLAG_ACTIVITY_CLEAR_TASK

  • FLAG_ACTIVITY_NEW_TASK와 같이 사용되며 task내에서 다른 activity를 모두 삭제함

  • flag


binding.btn.setOnClickListener {
	val intent = Intent(this, MainActivity::class.java).apply {
    	flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
    }
    startActivity(intent)
}



FLAG_ACTIVITY_CLEAR_TASK

  • 기존에 있던 activity를 제거(상위 포함)하고 새로운 Activity를 생성
  • flag

binding.btn.setOnClickListener {
	val intent = Intent(this, MainActivity::class.java).apply {
    	flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
    }
    startActivity(intent)
}
  • CLEAR_TOP과 SINGLE_TOP을 통해서 기존 ACTIVITY 재사용

0개의 댓글