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

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable