Nuke Olaf - Log Store
[Android] 안드로이드 - 앱 종료, 재시작 본문
액티비티 백 스택을 전부 clear 하고, 새로운 액티비티를 시작하고 싶었다.
val intent = Intent(this, LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
finish()
그러나, 위의 액티비티 플래그가 제대로 먹히지 않아서 finishAffinity() 를 사용했다.
affinity 는 액티비티가 속한 task 를 말한다. 기본적으로 한 앱의 모든 액티비티들은 모두 같은 task 에 속해있다.
그러나, 한 액티비티의 기본 affinity 를 다르게 수정할 수 있다. 다른 앱에 정의된 액티비티끼리 affinity 를 공유하거나, 동일한 앱의 액티비티끼리 다른 affinity 를 가지게 할 수 있다.
startActivity() 가 FLAG_ACTIVITY_NEW_TASK 플래그를 포함하는 경우, 새로 생성된 액티비티는 기존의 액티비티와 다른 affinity 를 가지게 된다.
안드로이드 공식문서 Handling affinities : https://developer.android.com/guide/components/activities/tasks-and-back-stack#Affinities
보통 액티비티를 종료할때 finish()를 많이 사용한다.
하지만 이렇게 종료하면 현재 액티비티만을 종료시킬 뿐 루트 액티비티는 그대로 남아있다
여기서 루트액티비티와 현액티비티를 모두 종료시켜 앱을끄고 싶다면 아래와 같은방법을 사용하자
// 해당 앱의 루트 액티비티를 종료
// (API 16미만은 ActivityCompat.finishAffinity())
Activity.finishAffinity()
// 현재 작업중인 쓰레드가 다 종료되면, 종료 시키라는 명령어
System.runFinalization()
// 현재 액티비티를 종료시킨다.
System.exit(0)
앱을 재시작 하고싶다면
finishAffinity()
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
System.exit(0)
System.exit(0) 으로 앱을 종료시키는 경우 앱과 관련된 프로세스나 블루투스 기기들이 전부 해제된다.
이를 원하지 않을시에는 해당 코드를 제거하면 된다
출처 >>>
'Android' 카테고리의 다른 글
[Android] 안드로이드 카카오 로그아웃/탈퇴 코드 (0) | 2020.05.08 |
---|---|
[Android] 안드로이드 - 다이얼로그로 웹 뷰 띄우기 (0) | 2020.05.08 |
[Android] - 안드로이드 리사이클러뷰 무한 스크롤 (Infinite/Endless Scroll) (0) | 2020.05.06 |
[Android] 안드로이드 - 리사이클러뷰 스크롤 상태저장 (0) | 2020.05.06 |
[Android] 안드로이드 - 네트워크 타임아웃 시간 설정 (0) | 2020.05.05 |
Comments