본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

android] 실행 중인 프로그램 Process 죽이기

by 회색뿔 2011. 1. 30.


아래 첫 번째 소스는 android 2.2 이전 버전에서만 동작 된다고 한다.

현재는 대부분 거의 2.2 이상의 버전을 사용하고 있기 때문에 크게 유용하지 않을지도 모른다.
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

권한도 필요하니 잊지 말고 설정해 주자.


패키지에 있는 Activity리스트를 이용하여 Activity를 종료 시키는 방법이라고 하는데, 주의할 점은 종료 시키더라도 작업이 남아 있다면 다시 프로세스에 다시 올라온다고 한다. 작업을 남겨 놓지 않는다면 죽겠지.. 뭐 자세하게 써보지는 않아서 자세한 설명은 생략


다시 다른 방법으로는 현재 Activity를 종료하는 api인 finish(); 최초 luncher activity를 종료 시키진 않는듯 하다.
엄밀히 말하면 가비지 컬렉터가 종료할 수 있더록 상태를 변경해준다고 생각하는게 맞을거 같다.
finish();

그 외에 System.exit(0);를 이용하기도...
System.exit(0);
몇가지 테스트를 해봤지만 역시 System.exit(0);가 가장 확실하게(눈에 보이게) 종료되는 것을 확인했다.
하지만 문제는  System.exit api는 프로그램을 강제적으로 죽이는 성격이 강해.. 프로그램이 어떠한 작업이나 일을 하는 도중에 호출이 된다면 정상적인 종료가 안된다는 단점이 있다.

예를 들어 A라른 프로그램에서 background services들을 동작시키고 3~4개의 thread를 동작 시켜 여러가지 정보를 받고 처리하는 도중에 System.exit가 메인 thread에서 exit가 호출 되면 작업 하던 것들을 다 팽개치고 종료 된다는 말이다.

고로, 종료를 강제로 하는 것도 좋지만 가비지 컬렉터가 잘 처리 할 수 있게 끔 잘 정리해 놓는 것이 좋으리라.