안드로이드(ANDROID) - finish()와 finishAffinity() 활용 방법
안드로이드에서 액티비티를 종료하는 방법은 크게 두 가지가 있습니다.
바로 finish() 와 finishAffinity() 입니다.
두가지 모두 액티비티를 종료하지만, 그 차이점은 무엇일까요?
finish()
finish() 는 특정 액티비티만 종료합니다. 즉, finish() 를 호출한 액티비티의 상위 액티비티는 그대로 유지됩니다.
예를 들어, MainActivity가 SecondActivity를 시작하고, SecondActivity에서 finish() 를 호출하면 다음과 같은 일이 발생합니다.
MainActivity
└── SecondActivity
MainActivity는 그대로 유지되고, SecondActivity만 종료됩니다.
finishAffinity()
finishAffinity() 는 액티비티의 액피니티를 종료합니다. 액피니티는 같은 앱의 액티비티들이 그룹화된 단위입니다. 액티비티의 액피니티는 getWindow().getActivityInfo().applicationInfo.packageName로 확인할 수 있습니다.
finishAffinity() 를 호출하면 액피니티에 속한 모든 액티비티가 종료됩니다.
예를 들어, MainActivity가 SecondActivity를 시작하고, SecondActivity에서 finishAffinity() 를 호출하면 다음과 같은 일이 발생합니다.
MainActivity
└── SecondActivity
MainActivity와 SecondActivity 모두 종료됩니다.
두가지 함수의 차이점
finish() 와 finishAffinity() 의 차이점을 다음과 같이 정리할 수 있습니다.
함수 | 종료 대상 |
finish() | 특정 액티비티 |
finishAffinity() |
액피니티에 속한 모든 액티비티
|
사용 시 고려 사항
finish() 는 특정 액티비티만 종료하기 때문에, 액티비티의 종료 흐름을 제어하기가 쉽습니다. 반면, finishAffinity() 는 액피니티에 속한 모든 액티비티를 종료하기 때문에, 액티비티의 종료 흐름을 제어하기가 어렵습니다.
따라서, 특정 액티비티만 종료해야 하는 경우에는 finish() 를 사용하고, 액피니티에 속한 모든 액티비티를 종료해야 하는 경우에는 finishAffinity() 를 사용합니다.
감사합니다.