Finish all activities at a time

AndroidAndroid ActivityActivity Finish

Android Problem Overview


I have an application with multiple pages i.e., multiple activities and some of them remain open.

Is there a way to close all activities at once?

Android Solutions


Solution 1 - Android

Whenever you wish to exit all open activities, you should press a button which loads the first Activity that runs when your application starts then clear all the other activities, then have the last remaining activity finish. to do so apply the following code in ur project

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

The above code finishes all the activities except for FirstActivity. Then we need to finish the FirstActivity's Enter the below code in Firstactivity's oncreate

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

and you are done....

Solution 2 - Android

There is a finishAffinity() method in Activity that will finish the current activity and all parent activities, but it works only in Android 4.1 or higher.

For API 16+, use

finishAffinity();

For lower (Android 4.1 lower), use

ActivityCompat.finishAffinity(YourActivity.this);

Solution 3 - Android

The best solution i have found, which is compatible with devices having API level <11

Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

This solution requires Android support library

Solution 4 - Android

For API 16+, use

finishAffinity();

For lower, use

ActivityCompat.finishAffinity(YourActivity.this)

Solution 5 - Android

There are three solution for clear activity history.

  1. You can write finish() at the time of start new activity through intent.

  2. Write android:noHistory="true" in all <activity> tag in Androidmanifest.xml file, using this if you are open new activity and you don't write finish() at that time previous activity is always finished, after write your activity look like this.

  3. write system.exit(0) for exit from the application.

Solution 6 - Android

You can Use finishAffinity() method that will finish the current activity and all parent activities. But it works only for API 16+.

API 16+ use:

finishAffinity();

Below API 16 use:

ActivityCompat.finishAffinity(this); //with v4 support library

To exit whole app:

finishAffinity(); // Close all activites
System.exit(0);  // closing files, releasing resources

Solution 7 - Android

I was struggling with the same problem. Opening the about page and calling finish(); from there wasn't closing the app instead was going to previous activity and I wanted to close the app from the about page itself.

This is the code which worked for me:

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 
finish();

Hope this helps.

Solution 8 - Android

Following two flags worked for me. They will clear all the previous activities and start a new one

  Intent intent = new Intent(getApplicationContext(), MyDetails.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);

Hope this helps.

Solution 9 - Android

None of the other answers worked for me. But I researched some more and finally got the answer.

You actually asked to close the app as I needed. So, add following code:

finishAffinity();

Solution 10 - Android

If you're looking for a solution that seems to be more "by the book" and methodologically designed (using a BroadcastReceiver), you better have a look at the following link: http://www.hrupin.com/2011/10/how-to-finish-all-activities-in-your-android-application-through-simple-call.

A slight change is required in the proposed implementation that appears in that link - you should use the sendStickyBroadcast(Intent) method (don't forget to add the BROADCAST_STICKY permission to your manifest) rather than sendBroadcast(Intent), in order to enable your paused activities to be able to receive the broadcast and process it, and this means that you should also remove that sticky broadcast while restarting your application by calling the removeStickyBroadcast(Intent) method in your opening Activity's onCreate() method.

Although the above mentioned startActivity(...) based solutions, at first glance - seem to be very nice, elegant, short, fast and easy to implement - they feel a bit "wrong" (to start an activity - with all the possible overhead and resources that may be required and involved in it, just in order to kill it?...)

Solution 11 - Android

You can try just finishAffinity() , its close all current activities to works on above v4.1

Solution 12 - Android

Problem with finishAffinity() is that only activities in your current task are closed, but activities with singleInstance launchMode and in other tasks are still opened and brought to the foreground after finishAffinity(). The problem with System.exit(0) is that you finish your App process with all background services and all allocated memory and this can lead to undesired side effects (e.g. not receiving notifications anymore).

Here are other two alternatives that solve both problems:

  1. Use ActivityLifecycleCallbacks in you app class to register created activities and close them when needed: https://gist.github.com/sebaslogen/5006ec133243379d293f9d6221100ddb#file-myandroidapplication-kt-L10
  2. In testing you can use ActivityLifecycleMonitorRegistry: https://github.com/sebaslogen/CleanGUITestArchitecture/blob/master/app/src/androidTest/java/com/neoranga55/cleanguitestarchitecture/util/ActivityFinisher.java#L15

Solution 13 - Android

You can store a boolean flag to represent if all activities should be finished or not (more preferred in your shared preferences) then onStart() method of each activity should have something like:

SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(this);
boolean needToDestroyFlag=pref.getBoolean("destroyFlag", false);
if(needToDestroyFlag)
{
	finish();
}else
{
	//...
}

Obviously you can set this flag like below when ever you need to finish all activities (in the current activity) after doing so you can call finish() method on current activity that will result to terminate current activity and pop activities from stack up one by one, the onStart() method of each one executes and causes to terminate it:

SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.putBoolean("destroyFlag", true);
editor.apply();

If you use the method that @letsnurture suggested, you'll be faced with the question asked by @gumuruh.

Solution 14 - Android

Use

finishAffinity ();

Instead of:

System.exit(); or finish();

it exit full application or all activity.

Solution 15 - Android

You can use the following code:

Intent i = new Intent(OldActivity.this, NewActivity.class);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

startActivity(i);

Solution 16 - Android

If rooted:

Runtime.getRuntime().exec("su -c service call activity 42 s16 com.example.your_app");

Solution 17 - Android

close the app

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

put this in the oncreate and onResume of the very first activity that is opened. ex. is on splash screen activity

if (getIntent().getBooleanExtra("EXIT", false)) {
            this.finish();
            System.exit(0);
        }

Solution 18 - Android

in LoginActivity

@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);
        finish();
        super.onBackPressed();
    }

Solution 19 - Android

moveTaskToBack(true);

//add this to the click listner

Solution 20 - Android

@Override
    public void onBackPressed(){
        MaterialAlertDialogBuilder alert = new MaterialAlertDialogBuilder(BorrowForm.this, MyTheme);
        alert.setTitle("Confirmation");
        alert.setCancelable(false);
        alert.setMessage("App will exit. Data will not be saved. Continue?");
        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast toast = Toast.makeText(BorrowForm.this, "App terminated.", Toast.LENGTH_SHORT);
                toast.getView().setBackgroundColor(Color.parseColor("#273036"));
                toast.setGravity(Gravity.CENTER_HORIZONTAL,0,0);
                TextView toastMessage=(TextView) toast.getView().findViewById(android.R.id.message);
                toastMessage.setTextColor(Color.WHITE);
                toast.show();
                finishAffinity();
            }
        });
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alert.setCancelable(false);
        alert.show();
    }

Solution 21 - Android

i am starter in java/android, may be this simple solution help for you

FIRST, create static class

public class ActivityManager {

    static Activity  _step1;
    static Activity _step2;
    static Activity _step3;

    public static void setActivity1(Activity activity)
    {
        _step1 = activity;
    }

    public static void setActivity2(Activity activity)
    {
        _step2 = activity;
    }

    public static void setActivity3(Activity activity)
    {
        _step3 = activity;
    }

    public static void finishAll()
    {
        _step1.finish();
        _step2.finish();
        _step3.finish();
    }

}

THEN when you run new activity save link to your manager(in step 1):

ActivityManager.setActivity1(this);
AddValuesToSharedPreferences();
Intent intent = new Intent(Step1.this, Step2.class);
startActivity(intent);

AND THEN in your last step finish all:

 public void OkExit(View v) throws IOException {
        ActivityManager.finishAll();
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsteveView Question on Stackoverflow
Solution 1 - AndroidletsnurtureView Answer on Stackoverflow
Solution 2 - AndroidKing of MassesView Answer on Stackoverflow
Solution 3 - AndroidMongi ZaidiView Answer on Stackoverflow
Solution 4 - AndroidRadu GrigorasView Answer on Stackoverflow
Solution 5 - AndroidDipak KeshariyaView Answer on Stackoverflow
Solution 6 - AndroidSheikh HasibView Answer on Stackoverflow
Solution 7 - AndroidAbhishek BalaniView Answer on Stackoverflow
Solution 8 - AndroidAjjiView Answer on Stackoverflow
Solution 9 - AndroidHimanshu SharmaView Answer on Stackoverflow
Solution 10 - Androiduser3139591View Answer on Stackoverflow
Solution 11 - AndroidVinodh KumarView Answer on Stackoverflow
Solution 12 - AndroidSebas LGView Answer on Stackoverflow
Solution 13 - AndroidDmila RamView Answer on Stackoverflow
Solution 14 - AndroidAnandhu VijayanView Answer on Stackoverflow
Solution 15 - AndroidEnadView Answer on Stackoverflow
Solution 16 - AndroidnafsakaView Answer on Stackoverflow
Solution 17 - Androidryan christoper lucasanView Answer on Stackoverflow
Solution 18 - AndroidĐắc NguyễnView Answer on Stackoverflow
Solution 19 - AndroidKaushik BorahView Answer on Stackoverflow
Solution 20 - Androidghunter99View Answer on Stackoverflow
Solution 21 - AndroidSergey NikonenkoView Answer on Stackoverflow