안드로이드 개발 질문/답변
(글 수 40,700)
응용을 종료하고 싶은데 잘 안되어서 고수님들의 도움을 받고자 합니다.
activity1 -> activity2
두번째 액티비티에서 응용 프로그램을 종료 하고자 합니다.
메뉴에서 exit버튼을 누르면
System.exit(0) 또는 android.os.Process.killProcess(android.os.Process.myPid()); 를 이용해서 종료를 하면
프로세서가 내려갔다가 다시 올라 옵니다.
activity2 를 finish하고 activity1 에서 종료를 하면 깔끔하게 종료가 됩니다.
그런데 activity2를 finish후에 응용을 종료하게 되면 원하지 않는 activity1이 화면에 나타나게 되어버리네요 ㅡㅡ;
응용프로그램을 종료 하는 다른 방법이나 깔끔한 처리 방법이 있는지 문의합니다.
2010.03.15 22:17:36
만약 Activity1이 더 이상 필요가 없는 거라 Activity2에서 Back Button을 눌렀을때 바로 종료가 되길 원하시는거라면 Activity1에서 Activity2를 뛰우고 나서 바로 Activity1을 finish해버리시면 되겠네요.
2010.03.15 23:47:13
ActivityManager 의 restartPackage API 를 통해서도 어플리케이션을 종료 할 수 있습니다.
필요한 퍼미션을 설정 하신 후,
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>
아래와 같이 한번 해보세요.
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
2010.06.16 18:44:01
응용프로그램 관리의 실행중인 것과 응용프로그램 설정에서의 실행중인 서비스는 다른건가요?
프로그램실행후 액티비티를 종료한상태인데
System.exit(0)로 하면 응용프로그램의 실행중인 목록에는 안뜨지만
android.permission.RESTART_PACKAGES 설정후 restartPackage 혹은 killBackgroundProcesses(getPackage()) 둘다 해봐도
응용프로그램의 실행중인 목록에 뜨네요
응용프로그램의 종료는 어디 까지 해줘야 정상적인 종료인가요?
2010.06.17 10:15:54
혹시 다른 분들은 개발환경이 어떻게 되시나요? 음 저는 퍼미션을 추가하고 am.restartPackage(getPackageName()) 를 호출하면 넥서스원에서 아무런 동작도 하지 않습니다. 물론 퍼미션을 추가하지 않은채 실행하면 권한이 없다는 Exception이 나오구요. 그 이유가 API 문서를 찾아보니 아래와 같이 restartPackage() 메서드가 더 이상 지원하지 않는(deprecated) 메서드라고 나옵니다.
public void restartPackage (String packageName)
그런데, 문제는 잘 동작한다는 분들이 계셔서, 음... 혹시 타겟과 안드로이드 버전을 알 수 있을까요?
아참, 한 가지 더 ~~!
질문하신 분이 액티비티에서 애플리케이션의 종료를 원한다고 하셨는데 그 이유를 알 수 있을까요?
안드로이드에서는 `하나의 프로세스가 하나의 애플리케이션이다`라는 공식이 성립하지 않습니다.
애플리케이션(실제로는 안드로이드의 태스크이며 사용자가 보는 관점에서의 애플리케이션입니다)이 하나의 프로세스가 아니기 떄문에
애플리케이션 종료하는 것이 프로세스의 종료로 이어지기는 어렵다고 생각합니다.
혹시, 더 자세히 아시는 분이 계시면 제가 답글 단 내용중 틀린것이 있다면 지적이나 보충설명 해주시면 감사하겠습니다.
답글이라 길게 적지 못하는 부분이 좀 아쉽네요 ㅎㅎ
public void restartPackage (String packageName)
Since: API
Level 3
This method is deprecated.
This is now just a wrapper for
killBackgroundProcesses(String)
;
the previous behavior here
is no longer available to applications because it allows them to
break other applications by removing their alarms, stopping their
services, etc.
그런데, 문제는 잘 동작한다는 분들이 계셔서, 음... 혹시 타겟과 안드로이드 버전을 알 수 있을까요?
아참, 한 가지 더 ~~!
질문하신 분이 액티비티에서 애플리케이션의 종료를 원한다고 하셨는데 그 이유를 알 수 있을까요?
안드로이드에서는 `하나의 프로세스가 하나의 애플리케이션이다`라는 공식이 성립하지 않습니다.
애플리케이션(실제로는 안드로이드의 태스크이며 사용자가 보는 관점에서의 애플리케이션입니다)이 하나의 프로세스가 아니기 떄문에
애플리케이션 종료하는 것이 프로세스의 종료로 이어지기는 어렵다고 생각합니다.
혹시, 더 자세히 아시는 분이 계시면 제가 답글 단 내용중 틀린것이 있다면 지적이나 보충설명 해주시면 감사하겠습니다.
답글이라 길게 적지 못하는 부분이 좀 아쉽네요 ㅎㅎ