안드로이드 : Clear Activity Stack (호출 system.exit(0)) 내가

신청서에 몇 가지 활동이 있습니다. 흐름이 매우 복잡합니다. Logout 응용 프로그램을 클릭하면 로그인 화면으로 이동하고 거기에서 사용자가 취소 버튼을 눌러 종료 할 수 있습니다 (호출 system.exit(0))

내가 종료하거나 다시 버튼을 때, 시스템은 스택에서 활동을 호출 🙁 내가 로그인 화면이 표시되면? 스택의 모든 활동을 취소 호출 할 수있는 방법은 finish()있다 이렇게 많은 활동이없는 일부 활동이없는 경우 닫아야으로 실용적이지 못하다 기본 카메라 호출 활동과 같은 활성입니다.

validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);


답변

대부분의 사람들이 틀 렸습니다. 내용에 관계없이 기존 활동 스택을 닫고 새 루트를 작성하려면 올바른 플래그 세트는 다음과 같습니다.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

문서에서 :

public static final int FLAG_ACTIVITY_CLEAR_TASK
API 레벨 11에 추가됨

에 전달 된 의도로 설정된
Context.startActivity()경우이 플래그는 활동이 시작되기 전에 활동과 연관된 기존 태스크가 지워지게합니다. 즉, 활동이 빈 작업의 새 루트가되고 이전 활동이 완료됩니다. 이것은와 함께 만 사용할 수 있습니다 FLAG_ACTIVITY_NEW_TASK.


답변

당신이 호출 할 때 startActivity마지막 활동에 항상 사용할 수 있습니다

Intent.FLAG_ACTIVITY_CLEAR_TOP

그 의도에 대한 플래그로.

국기에 대한 자세한 내용은 여기를 참조하십시오 .


답변

다음은 API 레벨 4에서 현재 버전 17까지 작동하는 새로운 최상위 활동으로 새 활동을 시작하는 간단한 헬퍼 방법입니다.

static void startNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) {
    Intent intent = new Intent(currentActivity, newTopActivityClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11
    currentActivity.startActivity(intent);
}

현재 활동에서 다음과 같이 호출하십시오.

startNewMainActivity(this, MainActivity.class);

답변

아래 코드로 Activity Backstate를 지우 십시오.

Intent intent = new Intent(Your_Current_Activity.this, Your_Destination_Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

끝난


답변

필자의 경우 LoginActivity도 닫혔습니다. 결과적으로

Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK

도와주지 않았다.

그러나 설정

Intent.FLAG_ACTIVITY_NEW_TASK

나를 도와 주었다.


답변

Intent intent = new Intent(LoginActivity.this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //It is use to finish current activity
startActivity(intent);
this.finish();

답변

나는 당신이에 의존하지 않는 해결책을 요구 finish()했지만, 이것이 도움이 될지 궁금합니다.

종료 플래그가 정적 클래스 변수로 발생하는지 추적하여 전체 앱 수명 동안 유지됩니다. 각에서 관련 활동의 onResume()사용

@Override
public void onResume() {
    super.onResume();
    if (ExitHelper.isExitFlagRaised) {
        this.finish();
    }
}

ExitHelper 클래스

public class ExitHelper {
    public static boolean isExitFlagRaised = false;
}

설정할 수있는 -의이 mainActivity에서, 사용자가 출구 버튼을 누르면 생각한 ExitHelper.isExitFlagRaised = true;다음과 finish(). 그 후 자동으로 재개되는 다른 관련 활동도 완료됩니다.