본문 바로가기

구글과인터넷/안드로이드

Android 어플리케이션 꺠끗하게 종료하는 법.

현재까지 진행 중이던 모든 프로세스나 Activity를 죽이는 방법이라네요^^

1.메니페스트 파일에 RESTART_PACKAGES 권한을 사용한다고 선언한다.
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>

2.ActivityManager 의 restartPackage API 를 호출한다.
ActivityManager am 
             = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

 
아직 사용해보진 않았지만, 저걸 사용하고 finish()를 하면 어플리케이션이 깨끗하게 종료될 듯하네요 ㅎ 


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://gogorchg.tistory.com/entry/Android-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%BA%A0%EB%81%97%ED%95%98%EA%B2%8C-%EC%A2%85%EB%A3%8C%ED%95%98%EB%8A%94-%EB%B2%95


[ Android ] 어플리케이션 꺠끗하게 종료하는 법.



// 어플리케이션과 모든 프로세스를 종료하는 함수

public void close()  

{  

     finish();  

     int nSDKVersion = Integer.parseInt(Build.VERSION.SDK);  

     if(nSDKVersion < 8)    //2.1이하  

     {  

           ActivityManager actMng = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  

           actMng.restartPackage(getPackageName());  

     }  

     else  

     {  

            new Thread(new Runnable() {  

                 public void run() {  

                      ActivityManager actMng = (ActivityManager)getSystemService(ACTIVITY_SERVICE);  

                      String strProcessName = getApplicationInfo().processName;  

                      while(true)  

                      {  

                           List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();  

                           for(RunningAppProcessInfo rap : list)  

                           {  

                                if(rap.processName.equals(strProcessName))  

                              {  

                                   if(rap.importance >= RunningAppProcessInfo.IMPORTANCE_BACKGROUND)  

                                        actMng.restartPackage(getPackageName());  

                                   Thread.yield();  

                                   break;  

                              }  

                         }  

                    }  

               }  

          }, "Process Killer").start();  

     }  

}  


어플리케이션을 종료 시킬 때 대부분 finish를 사용하는 데요. 
위 소스는 종료 시 모든 프로세스를 제거 시켜주는 겁니다.

어플리케이션에서 생성 한 서비스등은 종료 해주지 않으면,
남아있게 되더라구요.

AudioManager등 같은~~ ㅋ

위와 같이 해주면 모든 프로세스가 종료가 되므로, 다른 프로그램에 피해를 주지 않겠죠.^^
참고하세요. 

추신: 구글링으로 찾은 함수인데.. 또 출처 주소를 잊어버렸습니다. 죄송합니다.