Things take time

[Android] 현재 실행중인 앱 종료하기 본문

Android(기능)

[Android] 현재 실행중인 앱 종료하기

겸손할 겸 2018. 3. 6. 13:44

[로직]


기본적으로 앱을 종료하는 명령어는 여러 개가 있다.


나같은 경우에는 기본적으로

android.os.Process.killProcess(android.os.Process.myPid());

이 명령어를 통해서 앱을 종료시킨다.

그러나 혹은 finish()로 종료시켜도 같은 효과는 나타나는데, 문제점은


현재 띄워진 액티비티가 2개 이상인 경우에는, 해당 옵션은 제일 위에 있는 액티비티만을 종료시킨다.


그러므로 새 액티비티가 띄워져 있을 때, 새 액티비티 뿐 아니라 루트 액티비티까지 같이 종료하고 싶을 때 사용하면 되겠다.

finishAffinity();
        System.runFinalization();
        System.exit(0);

Activity.finishAffinity() : 해당 앱의 루트 액티비티를 종료시킨다. (API  16미만은 ActivityCompat.finishAffinity())

System.runFinalization() : 간단히 말해 현재 작업중인 쓰레드가 다 종료되면, 종료 시키라는 명령어

System.exit(0) : 현재 액티비티를 종료시킨다.


이렇게 되면, 루트 & 현재 액티비티를 종료하고 메모리까지 GC에게 처리하게 하므로 깔끔하게 앱이 초기화된다.

물론 백그라운드 버튼울 누르면 앱은 살아있게 되나, 백그라운드에 있는 앱을 클릭하면 루트 액티비티의 OnCreate() 부터 시작되게 된다.


나는 앱이 외부에서 특정 변수를 가져오면 루트에서 새 액티비티를 띄우라고 되어있던 로직에서, 뒤로 가기를 눌렀을 땐 앱을 깔끔히 초기화 할때 사용한다.



출처

https://developer.android.com/reference/java/lang/System.html#runFinalization()

https://blog.asamaru.net/2015/12/15/android-app-finish/