본문 바로가기

IT

앱 process 종료하기

반응형

 안드로이드 프로그램을 프로세스 수준에서 완전히 중지하는 방법을 검색해보니 대부분 killProcess 방식으로 처리하는 것이 대부분이었습니다. 권장하지도 않는 방법이고, 단순히 프로그램 완전종료를 위해서 별도의 퍼미션을 추가해야 한다던지(관심없는 사용자들이 대부분이지만 말입니다.) 그다지 좋은 방법으로 보이지 않습니다.


 해서 이것저것 해보다가 일단 저에게 맞는 방법을 찾아서 몇자 적어봅니다.


  아래 이미지와 같이 eclipse를 통해서 프로그램을 실행하고 각 기기에서 프로그램을 처음 실행한 엑티비티까지 모두 onDestroy()를 탄 상황임에도 불구하고, 모두 프로세스는 그대로 남아있습니다. 사용했던 메모리도 그대로 보존하고 있죠.. 이녀석들이 도대체 언제 내려갈지 아무도 예측할 수 없습니다.


 


 이래저래 몇가지 방법은 2.2버전부터는 안된다, 2.3버전에서 안먹힌다. 프로세스를 강제로 죽이는 것은 문제가 있다. 등등 방법은 참 많이 제시되었는데, 뭔가 다 왠지 2% 부족한 느낌이었습니다.


 그래서 마지막으로 시도한 방법은 다음과 같습니다.


 1) 엑티비티에서 사용한 모든 리소스를 메모리에서 반환한다.

 2) 프로그램에서 가장 선행되어 실행되었던 엑티비티, 가장마지막으로 중지되는 엑티비티(둘이 다른 경우는 거의 없죠?)의 onDestroy()메소드의 가장 마지막에 System.exit(0); 를 추가한다.




 3번째 장비에 붙어있는 프로세스 2개는 하나의 프로그램에서 돌아가는 프로세스가 2개로 분리된 (뭐 내부적으로 3개 이상 한번에 돌아갑니다. 서비스가 많아서;;;) 이런 경우도 가장 마지막에 종료되는 엑티비티가 종료되는 순간에 다른 프로세스들도 stopService를 이용하여 종료되면서 onDestroy()메소드 마지막에 각각 System.exit(0); 를 달아 놓았습니다.

 위의 이미지와 아래 이미지를 비교해서 보시면 좀 많이 가려져 있어서 보기 힘드시겠지만..;;; 3번째 기기의 프로세스 2개가 정상적으로 종료되고 프로세스 목록에서 사라진것을 볼 수 있을 겁니다. 끝.


반응형