신청서에 몇 가지 활동이 있습니다. 흐름이 매우 복잡합니다. 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()
. 그 후 자동으로 재개되는 다른 관련 활동도 완료됩니다.