Android: Remove All The Previous Activities From The Back Stack
Answer :
The solution proposed here worked for me:
Java
Intent i = new Intent(OldActivity.this, NewActivity.class); // set the new task and clear flags i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(i);
Kotlin
val i = Intent(this, NewActivity::class.java) // set the new task and clear flags i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(i)
However, it requires API level >= 11.
Here is one solution to clear all your application's activities when you use the logout button.
Every time you start an Activity, start it like this:
Intent myIntent = new Intent(getBaseContext(), YourNewActivity.class); startActivityForResult(myIntent, 0);
When you want to close the entire app, do this:
setResult(RESULT_CLOSE_ALL); finish();
RESULT_CLOSE_ALL is a final global variable with a unique integer to signal you want to close all activities.
Then define every activity's onActivityResult(...)
callback so when an activity returns with the RESULT_CLOSE_ALL value, it also calls 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); }
This will cause a cascade effect that closes all your activities.
This is a hack however and uses startActivityForResult
in a way that it was not designed to be used.
Perhaps a better way to do this would be using broadcast receivers as shown here:
On logout, clear Activity history stack, preventing "back" button from opening logged-in-only Activites
See these threads for other methods as well:
Android: Clear the back stack
Finish all previous activities
To clear the activity stack completely you want to create a new task stack using TaskStackBuilder, for example:
Intent loginIntent = LoginActivity.getIntent(context); TaskStackBuilder.create(context).addNextIntentWithParentStack(loginIntent).startActivities();
This will not only create a new, clean task stack, it will also allow for proper functioning of the "up" button if your LoginActivity has a parent activity.
Comments
Post a Comment