program story

모든 활동으로 애플리케이션을 종료하는 방법은 무엇입니까?

inputbox 2021. 1. 5. 08:04
반응형

모든 활동으로 애플리케이션을 종료하는 방법은 무엇입니까?


중복 가능성 :
애플리케이션 종료-눈살을 찌푸 리나요?

애플리케이션이 필요로하는 한 SharedPreferences에 저장된 일부 민감한 데이터를 삭제해야하므로 사용자에게 애플리케이션을 종료 할 수있는 옵션을 제공하고 싶습니다.

사용자가 종료하려는 즉시 SharedPreferences의 암호를 지워야하며 물론 응용 프로그램의 모든 활동을 닫아야합니다 (알려진 암호없이 실행하는 것은 의미가 없습니다. 충돌이 발생합니다).

어떻게 할 수 있습니까?

System.exit(0)그리고 finish()쓸모없는 -은 현재 활동을 종료합니다. 작업 관리자 앱이 있다는 것을 알고 있습니다. 그 사람은 어떻게하고 있습니까? 전체 응용 프로그램을 종료 할 수 있습니다 ...


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

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

@Override
public void onBackPressed() {

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

맞습니다. 호출 finish()하면 전체 애플리케이션이 아닌 현재 활동 만 종료됩니다. 그러나 이에 대한 해결 방법이 있습니다.

활동을 시작할 때마다을 사용하여 시작하십시오 startActivityForResult(...). 전체 앱을 닫으려면 다음과 같이 할 수 있습니다.

setResult(RESULT_CLOSE_ALL);
finish();

그런 다음 모든 활동의 onActivityResult(...)콜백을 정의 하여 활동이 RESULT_CLOSE_ALL과 함께 반환 될 때 다음을 호출하도록 합니다 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를 지원합니다. 응용 프로그램이 닫힐 때 파기 될 수 있도록 암호를 변수에 저장합니다.


사용자가 열려있는 모든 활동을 종료하려면 앱이 시작될 때 실행되는 첫 번째 활동을로드하는 버튼을 눌러야합니다 (제 경우에는 "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();
    }

Android 플랫폼에서이 질문에 대한 답은 "종료 버튼을 만들지 마십시오. 사용자가 더 이상 원하지 않는 활동을 완료하면 활동 관리자가 적절하다고 판단되는대로 정리합니다."입니다.


애플리케이션이 필요로하는 한 SharesPreferences에 저장됩니다.

왜?

사용자가 종료하려는 즉시 SharedPreferences의 암호를 지워야하며 물론 응용 프로그램의 모든 활동을 닫아야합니다 (알려진 암호없이 실행하는 것은 의미가 없습니다. 충돌이 발생합니다).

더 좋은 점은 비밀번호를 SharedPreferences. 정적 데이터 멤버에 보관하십시오. 데이터는 앱의 모든 활동이 종료되거나 (예 : BACK 버튼) 삭제되거나 (예 : 사용자가 HOME을 누른 후 언젠가 다른 활동을위한 공간을 만들기 위해 RAM에서 쫓겨 난 경우) 자연스럽게 사라집니다.

일종의 사전 예방 적 "비밀번호 비우기"를 원하면 정적 데이터 멤버를로 설정하고 null활동에서 해당 멤버를 확인하고 해당 멤버가있을 때 적절한 조치를 취하도록합니다 null.


사용 onBackPressed()방법 :

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

or use the finish() method, I have something like

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


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

With super.finish() you close the super class's activity.


My understanding of the Android application framework is that this is specifically not permitted. An application is closed automatically when it contains no more current activities. Trying to create a "kill" button is apparently contrary to the intended design of the application system.

To get the sort of effect you want, you could initiate your various activities with startActivityForResult(), and have the exit button send back a result which tells the parent activity to finish(). That activity could then send the same result as part of its onDestroy(), which would cascade back to the main activity and result in no running activities, which should cause the app to close.

ReferenceURL : https://stackoverflow.com/questions/3105673/how-to-kill-an-application-with-all-its-activities

반응형