본문 바로가기

Development/Android

Process Kill - Activity

이번 포스팅은 안드로이드에서 실행된 어플의 프로세스 종료에 대해 정리를 해보려고 합니다.

참고 : Android Developers Dev Guide - Framework Topics Activities

위의 링크는 안드로이드 Develop 공식 사이트이며, 그중에 Activity에 대한 내용을 링크해놓은 것입니다. 참고를 하면 도움이 될 것 같습니다.

본격적으로,

Activity를 종료 시키는 방법을 나열한다면, 

// 첫번째 방법
finsish();
// 두번째 방법
System.exit(0);
// 세번째 방법
android.os.Process.killProcess(android.os.Process.myPid());
// 네번째 방법
ActivityManager am  = (ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
// 다섯번째 방법
ActivityManager am  = (ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE);
am.killBackgroundProcesses(getPackageName());

여기서 첫번째 방법은 Activity가 종료되지만 Task 상에서 Process는 실제 종료된 상태는 아닙니다. 따라서 두번째와 세번째를 사용하면 Process까지 종료를 시키게 됩니다.

하지만 두번째 세번째 방법도 Activity를 둘 이상을 사용하게 된다면 Process가 종료되었다가 이전 Activity로 Process가 다시 실행되어 Process가 종료되는 것이 아니라 다시 실행되고 이전 Activity로 돌아가되 됩니다.

네번째 방법과 다섯번째 방법은 구글로 검색하고 포럼에서 게시글을 찾아보고 나온 방법인데요. 이것도 현재 Froyo 버전 이후부터는 작동되지 않는 것을 확인했습니다.(저는 테스트를 2.3.3 버전의 넥서스 원으로 테스트를 하여 확인했습니다.)

따라서 둘 이상의 Activity를 사용할 때는 이전 Activity도 함께 finish를 하고 두번째나 세번째 방법으로 종료를 해야 다시 Process가 살아나지 않는 것으로 확인하였습니다.

그래서 만든 클래스가 Activity의 Manage를 할 수 있는 간단한 클래스를 만들었습니다.


위의 클래스 사용 방법은 Activity에서 onCreate에서 addActivity Method로 등록을 하고 onDestory에서 deleteActivity Method로 삭제를 넣어준뒤 종료를 원하는 시점에서 allEndActivity Method를 호출 후에 위의 두번째, 세번째 방법으로 Process를 종료하면 모든 Actvity가 종료되고 그 어플리케이션의 Process까지 종료가 됩니다.