Android Stack 활동을 지우는 방법은 무엇입니까?
Android에 여러 활동이있는 애플리케이션이 있고 사용자가 메뉴 버튼을 눌러 로그 아웃 할 수 있기를 원합니다. 내가 가진 문제는
A) Android는 애플리케이션을 종료하도록 허용하지 않습니다.
B) 사용자를 LoginActivity
다시 보내더라도 언제든지 뒤로 누르고 이전 활동으로 돌아갈 수 있습니다.
나는 이미 다음 두 가지 플래그로 활동을 시작하려고 시도했습니다.
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
나는 또한 그들 각각을 스스로 시도했습니다.
나는 또한 다른 StackOverflow 질문에서 읽은 finish()
후 호출 을 시도했습니다 startActivity(intent)
.
로그인 활동에서 뒤로 버튼을 재정 의하여 활동을 완료하는 대신 앱을 숨 깁니다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
또한 루트 활동에 android : alwaysRetainTaskState = "true"를 설정해야합니다. 그래야 Android가 사용자로부터 30 분 동안 활동이 없으면 스택 (로그인 활동 포함)이 삭제되지 않습니다.
그런 다음 성공적인 로그인이 있으면 finish ()를 호출하십시오.
이것은 비트 OR이어야합니다. 그렇지 않으면 이전 플래그를 덮어 쓰게됩니다.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
이렇게 :
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
기록 스택에서 활동 제거의 Wakka 에 따라 ...
추가 android:noHistory="true"
귀하에 속성을 <activity>
에서 AndroidManifest.xml
이 같은 :
<activity android:name=".MyActivity"
android:noHistory="true">
</activity>
당신이 사용하는 경우 Android API 11
이상, 당신은 스택을 취소 한 다음 코드를 사용할 수 있습니다.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
이것은 활동 백 스택을 지우지 않습니다.
위의 답변을 모두 따른 후에도 뒤로 버튼을 눌렀을 때 앱을 닫기 전 마지막 활동을 잠시 보여주었습니다.
이것이 내가 한 일입니다.
@Override
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
이제 내 앱은 번거 로움없이 뒤로 누를 때 종료됩니다.
설정 Intent.FLAG_ACTIVITY_CLEAR_TOP
은 Intent.FLAG_ACTIVITY_NEW_TASK
플래그를 설정하지 않은 매우 유사한 경우에 저에게 효과적이었습니다. 없이 시도해 보셨습니까?
이것은 나를 위해 일합니다 :)
Intent main = new Intent(this, A_Activity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(main);
Intent tool = new Intent(this, B_Activity.class);
startActivity(tool);
finish();
예를 들어 A는 내 루트 활동입니다.
스택에서 시작 활동 E를 호출 할 때 활동 A-> B-> C-> D가 있습니다. 이제 A-> E가 있습니다.
잘 모르겠지만 :) 작동합니다.
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
이것을 작성하고 참고 : LoginActivity
먼저 Launcher로 시작해야하며
런처 모드를 작성하면 플래그가 목적을 덮어 쓰므로을 제거 launchermode
하고 시도해보십시오.
이 시도
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
이 코드를 사용하여 로그인 활동 (A)을 시작하는 경우 :
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
활동은 활동 스택에 있어야합니다. 그렇지 않으면이 플래그가 영향을주지 않습니다.
If we use finish() in the Login activity (A), after launching activity (B) (to avoid going back to A from B), the activity A (Login) will not be in the stack. Exactly the same happens when the login activity has "noHistory" as attribute.
So, the solution for me was a mix of other responses:
This code goes in the activity B, to avoid come back to the login activity:
@Override
public void onBackPressed() {
moveTaskToBack(true);
super.onBackPressed();
}
And this code goes in the activity which call the logout function:
public static void logout() {
Intent intent = new Intent(activity, LoginMain.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
ReferenceURL : https://stackoverflow.com/questions/4190429/how-to-clear-the-android-stack-of-activities
'programing' 카테고리의 다른 글
HtmlHelper의 확장 메서드에서 전달 된 람다 식에서 속성 값을 가져 오는 가장 쉬운 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
OpenXML을 사용하여 Word에 줄 바꿈 삽입 (0) | 2021.01.17 |
PHP-오버로드 된 속성의 간접 수정 (0) | 2021.01.17 |
Oracle에서 구체화 된 뷰를 새로 고치는 방법 (0) | 2021.01.17 |
문자열이 특정 패턴으로 끝나는 지 확인 (0) | 2021.01.17 |