2010-06-23 3 views
45

가능한 중복 :
Quitting an application - is that frowned upon?모든 활동이있는 응용 프로그램을 종료하는 방법은 무엇입니까?

내가 한으로 된 SharedPreferences에 저장된 민감한 데이터를 삭제할 필요로하는 응용 프로그램을 종료하기 위해 사용자에게 옵션을 제공 할 응용 프로그램에 필요합니다.

사용자가 종료하려고하면 SharedPreferences의 암호를 지우고 응용 프로그램의 모든 활동을 닫아야합니다 (알려진 암호없이 실행하면 충돌이 발생합니다).

어떻게하면됩니까?

System.exit(0)finish()은 현재 활동을 종료합니다. taskmanager 앱이 있다는 것을 알고 있습니다. 그게 어떻게 그 일을하고 있니? 그것은 전체 응용 프로그램을 죽일 수있어 ...

답변

3

안드로이드 응용 프로그램 프레임 워크에 대한 나의 이해는 이것이 특별히 허용되지 않는다는 것입니다. 현재 활동이 더 이상 포함되지 않으면 응용 프로그램이 자동으로 닫힙니다. "kill"버튼을 만들려고 시도하는 것은 응용 시스템의 의도 된 디자인과 분명히 반대입니다.

원하는 효과를 얻으려면 startActivityForResult()로 다양한 액티비티를 시작하고 종료 버튼으로 부모 액티비티에 finish()를 알리는 결과를 보내도록 할 수 있습니다. 그러면 해당 액티비티는 onDestroy()의 일부로 동일한 결과를 보낼 수 있습니다.이 액티비티는 주요 액티비티로 다시 연결되어 실행중인 액티비티가 없으므로 앱을 닫아야합니다.

7

SharesPreferences에 저장되며, 응용 프로그램이 필요로하는 한.

왜?

는 즉시 사용자가 은 삭제해야하고 물론 응용 프로그램의 모든 활동이 폐쇄해야 된 SharedPreferences에서 비밀번호를 종료하고 싶은대로 (그것은 알려진없이 에게이를 실행하는 데 의미가 없습니다 비밀번호 - )가 다운됩니다.

더욱 우수 : 암호를 SharedPreferences에 넣지 마십시오. 정적 데이터 멤버에서이 작업을 유지하십시오. 앱의 모든 활동이 종료되거나 (예 : BACK 버튼) 파괴 된 경우 (예 : 사용자가 HOME을 누른 후 언젠가 다른 활동을위한 공간을 만들기 위해 RAM에서 퇴장) 데이터가 자연스럽게 사라집니다.

사전 "플러시 암호"를 원할 경우 정적 데이터 구성원을 null으로 설정하고 활동이 해당 구성원을 확인하고 null 일 때 적절한 조치를 취하게하십시오.

+0

감사합니다. 그게 효과가 있었지만, 어떤 활동에 충돌이 생기 자마자 그것은 NULL이 될 것이고, 다른 활동들조차도 여전히있을 것입니다. 잘 됐네요 ... 괜찮은 것 같아요. – Nils

6

onBackPressed() 방법 사용 :

@Override 
public void onBackPressed() {  
    android.os.Process.killProcess(android.os.Process.myPid()); 
} 

을하거나 finish() 방법을 사용하여, 나는 super.finish와

//Password Error, I call function 
    Quit();    


    protected void Quit() { 
     super.finish(); 
    } 

같은 것을()는 슈퍼 클래스의 활동을 닫을 수 있습니다.

+0

TNX 이걸로 외국 프로세스를 죽일거야. like : "org.mozilla.firefox" "org.mozilla.firefox.App" – Criss

32

정확합니다 : finish()으로 전화하면 전체 응용 프로그램이 아닌 현재 활동 만 종료됩니다. 그러나 이에 대한 해결 방법은 다음과 같습니다.

활동을 시작할 때마다 startActivityForResult(...)을 사용하여 시작하십시오. 당신은 전체 응용 프로그램을 종료 할 때, 당신은 같은 것을 할 수 있습니다 활동이 RESULT_CLOSE_ALL 값을 반환 할 때

setResult(RESULT_CLOSE_ALL); 
finish(); 

그런 다음 이렇게 모든 활동의 onActivityResult(...) 콜백을 정의, 그것은 또한 finish() 호출 :

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch(resultCode) 
    { 
    case RESULT_CLOSE_ALL: 
     setResult(RESULT_CLOSE_ALL); 
     finish(); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

이것은 모든 활동을 닫는 계단 효과를 유발합니다.

또한 CommonsWare를 제안합니다. 암호를 변수에 저장하여 응용 프로그램을 닫을 때 암호가 손상되도록하십시오.

+0

@mtmurdock을 많이 도와주었습니다. 이 솔루션을 주셔서 대단히 감사합니다 – praveenb

+0

RESULT_CLOSE_ALL을 (를) 변수로 해결할 수 없습니다. – hamish

+0

나는 인터넷 검색을하고 두 사람이 0을 사용하는 것을 발견했습니다. public final static int RESULT_CLOSE_ALL = 0; – hamish

12

열려있는 모든 활동을 종료하려면 사용자가 "LoginActivity"에서 앱을 시작할 때 실행되는 첫 번째 활동을로드하는 버튼을 눌러야합니다.

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

위의 코드는 LoginActivity를 제외한 모든 활동을 삭제합니다. LoginActivity는 사용자가 프로그램을 실행할 때 발생하는 첫 번째 활동입니다. 그런 다음이 코드를 LoginActivity의 onCreate에 넣고 'Exit'메시지가 전달 될 때 자체 파괴해야하는시기를 알립니다.

if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

당신이 안드로이드 플랫폼에서이 질문에 도착 대답은 다음과 같습니다. "마침 활동은 사용자가 더 이상 원하는 종료 버튼을하지 마십시오, 그리고는 적합한으로 작업 관리자를 정리합니다. "

+0

좋은 해결책이지만 새로운 활동을 시작하는 데 오버 헤드가되지는 않습니다 ... – aProgrammer

+3

예,하지만 안드로이드는 프로그래머에게 앱의 "exit"버튼을 만들 수 없도록 아주 열심히 노력합니다. 따라서 응용 프로그램을 빠져 나오도록 언어를 속여서 천천히 움직여야합니다. 그러면 몇 가지 활동을 멈추고 마지막 명령을 몰래 끝내고 마지막 활동을 마칩니다. 그것은 그를 산만하게해서 경비원을 지나치는 것과 같고, 그가 보지 않을 때 달립니다. –

84

finish() 메서드를 사용하면 프로세스가 완전히 닫히지 않고 백그라운드에서 계속 작동합니다.

(모든 활동 또는 하위 활동에 사용하지 마십시오)의 주요 활동이 코드를 사용하십시오 :

@Override 
public void onBackPressed() { 

    android.os.Process.killProcess(android.os.Process.myPid()); 
    // This above line close correctly 
} 
+1

와우, 오른쪽 방향 !!! 감사합니다. – Ponmalar

+13

이것은 프로세스를 죽일 것이지만 반드시 메모리의 작업을 죽이지는 않습니다. 따라서 앱이 다시 시작되면 마지막으로 활동 스택 (작업)이 다시 생성됩니다. –

+4

그래, 나는이 해결책을 전혀 좋아하지 않는다. 프로세스를 종료하면 데이터를 저장하거나 보류중인 작업을 완료해야하는 모든 기회가 사라집니다. 이것은 응용 프로그램을 종료하는 가장 둔기 같은 동굴 사람의 방식과 같으므로 모든 비용을 들이지 않고 피해야합니다. – mtmurdock

관련 문제