[java] 이전 활동 모두 완료

내 응용 프로그램에는 다음과 같은 흐름 화면이 있습니다.

Home->screen 1->screen 2->screen 3->screen 4->screen 5

이제 log out 각 화면에 공통 버튼이 있습니다.

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5)

사용자가 모든 화면에서 로그 아웃 버튼을 클릭하면 모든 화면이 완료되고 새 화면 Log in이 열리기를 원합니다 .

나는 FLAG_ACTIVITY이것을 달성하기 위해 거의 모든 것을 시도했다 . 또한 stackoverflow에서 일부 답변을 겪었지만 문제를 해결할 수는 없습니다. 내 응용 프로그램이 Android 1.6에 있으므로 사용할 수 없습니다FLAG_ACTIVITY_CLEAR_TASK

문제를 해결할 방법이 있습니까?



답변

사용하다:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

이렇게하면 집 위에있는 모든 활동이 지워집니다.

사용자가 로그인하여 홈을 생성 할 때 로그인 화면을 마치고 그 화면의 맨 위에 1에서 5까지의 모든 화면이 있다고 가정합니다. 내가 게시 한 코드는 다른 모든 활동을 마치는 홈 화면으로 돌아갑니다. 인 텐트에 추가 기능을 추가하고 홈 화면 활동에서이를 읽고 완료 할 수도 있습니다 (로그인 화면을 다시 시작하거나 다른 방법으로 시작할 수 있음).

확실하지 않지만이 플래그로 로그인을 시도 할 수도 있습니다. 이 경우 활동이 어떻게 주문되는지 모르겠습니다. 따라서 현재 표시된 화면을 포함하여 현재 화면 아래의 화면을 지우는 지 확실하게 알 수 있습니다.

도움이 되었기를 바랍니다.


답변

당신은 시도 할 수 있습니다 Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK. 이전의 모든 활동을 완전히 지우고 새로운 활동을 시작합니다.


답변

새 활동을 시작하기 전에 다음 코드를 추가하십시오.

finishAffinity();

또는 이전 버전의 Android에서 작동하려는 경우 :

ActivityCompat.finishAffinity(this);


답변

사용자가 열려있는 모든 활동을 종료 하려면 애플리케이션을 시작할 때 실행되는 첫 번째 활동을로드하고 다른 모든 활동을 지우고 마지막 남은 활동을 완료하는 단추를 눌러야합니다. 사용자가 종료 버튼을 누를 때 다음 코드를 실행하십시오. 내 경우에는 LoginActivity내 프로그램에서 가장 먼저 실행되는 활동입니다.

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

위의 코드는를 제외한 모든 활동을 지 웁니다 LoginActivity. 그런 다음 내부에 다음 코드를 삽입 LoginActivityonCreate(...)경우에 대해 듣고, LoginActivityEXIT ‘신호 전달 재현하고,이’

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

Android에서 종료 버튼을 만드는 것이 왜 그렇게 어려운가요?

Android는 사용자가 사용하는 프로그램이 백그라운드에서 실행 중인지 여부에 대해 신경 쓰지 않기를 원하기 때문에 응용 프로그램에 “종료”버튼이 없도록 권장하지 않습니다.

Android OS 개발자는 프로그램이 예기치 않게 종료되고 전화기의 전원이 꺼진 상태에서 살아남을 수 있기를 원하며, 사용자가 프로그램을 다시 시작하면 중단 된 곳에서 바로 가져옵니다. 따라서 사용자는 응용 프로그램을 사용하는 동안 전화를 받고 더 많은 리소스를 위해 응용 프로그램을 해제해야하는지도를 열 수 있습니다.

사용자가 응용 프로그램을 다시 시작하면 중단없이 중단 된 부분을 바로 가져옵니다. 이 종료 버튼은 활동 관리자의 전원을 사용하여 자동으로 관리되는 Android 프로그램 수명주기에 문제를 일으킬 수 있습니다.


답변

Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

이것은 모든 안드로이드 버전에서 작동합니다. 어디 IntentCompat클래스는 안드로이드 지원 라이브러리에 추가.


답변

활동에 다음을 사용하십시오

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

프래그먼트 사용을 위해 CLEAR_TASK 플래그를 제거하십시오.

이것이 일부 사람들에게 사용될 수 있기를 바랍니다.


답변

나는 늦었다 고 생각하지만 간단하고 짧은 대답이 있습니다. Activity에는 finishAffinity () 메소드가 있으며 현재 활동 및 모든 상위 활동을 완료하지만 Android 4.1 이상에서만 작동합니다.

API 16+의 경우

finishAffinity();

16 세 미만인 경우

ActivityCompat.finishAffinity(YourActivity.this);

그것이 도움이되기를 바랍니다!