How to exit an Android app programmatically?

JavaAndroidEclipseAndroid Activity

Java Problem Overview


I am sure this question has been asked number of times because I read a few. My client wants me to put a button into his app where users can click and exit. I have read this and found calling finish() will do it. But, finish is only closing the current running activity right? I have lot of activities so in this case I have to pass each and every activity's instance and finish them or make every activity into Singleton pattern.

I also got to know Activity.moveTaskToBack(true) can get you into the home screen. OK, this is not closing but backgrounding the process. So is this is effective?

Which method should I use to close the app completely? Any of above described or any other method/other usage of above methods?

Java Solutions


Solution 1 - Java

The finishAffinity method, released in API 16, closes all ongoing activities and closes the app:

this.finishAffinity();

> Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch.

> Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.


Since API 21, you can use:

finishAndRemoveTask();

>Finishes all activities in this task and removes it from the recent tasks list.

Alternatives:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

Source: https://stackoverflow.com/questions/6330200/how-to-quit-android-application-programmatically


Hope it helps! Good Luck!

Solution 2 - Java

Actually everyone is looking for closing the application via an onclick event, wherever may be activity...

Add this code to an onclick event:

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
	homeIntent.addCategory( Intent.CATEGORY_HOME );
	homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
	startActivity(homeIntent); 

Solution 3 - Java

You can call System.exit(); to get out of all the acivities.

    submit=(Button)findViewById(R.id.submit);
    		
    		submit.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
    				System.exit(1);
   				
    			}
    		});
    		

Solution 4 - Java

If you want to exit from your application, use this code inside your button pressed event:

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

Solution 5 - Java

 @Override
	public void onBackPressed() {
		AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
		alertDialogBuilder.setTitle("Exit Application?");
		alertDialogBuilder
				.setMessage("Click yes to exit!")
				.setCancelable(false)
				.setPositiveButton("Yes",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int id) {
								moveTaskToBack(true);
								android.os.Process.killProcess(android.os.Process.myPid());
			                    System.exit(1);
							}
						})

				.setNegativeButton("No", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {

						dialog.cancel();
					}
				});

		AlertDialog alertDialog = alertDialogBuilder.create();
		alertDialog.show();
	}

Solution 6 - Java

It's way too easy. Use System.exit(0);

Solution 7 - Java

Accually there are two possible situations:

  1. You may want to exit from the activity
  2. Or you want to exit from the application

You can exit from the activity using following code:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

But this will not kill the underlying activities in the same application. This will just minimize the application.

If you want to exit from application use the following code to end its process:

android.os.Process.killProcess(android.os.Process.myPid()); 

for mono development just use

process.KillProcess(Process.MyPid());

Solution 8 - Java

How about this.finishAffinity()

From the docs,

> Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch. Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.

Solution 9 - Java

android.os.Process.killProcess(android.os.Process.myPid());

Solution 10 - Java

this will clear Task(stack of activities) and begin new Task

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);

Solution 11 - Java

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
System.exit(1);

Use this Code it's much useful, and you can exit all of the activities.

Solution 12 - Java

 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }

Solution 13 - Java

Achieving in Xamarin.Android:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }

Solution 14 - Java

put this one into your onClic:

moveTaskToBack(true);
    finish()

Solution 15 - Java

Try this on a call. I sometimes use it in onClick of a button.

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

It instead of closing your app , opens the dashboard so kind of looks like your app is closed.

read this question for more clearity https://stackoverflow.com/questions/3226495/android-exit-application-code/3226743#3226743

Solution 16 - Java

Use this.finishAffinity(); on that button instead of finish(); If it does not work then you can also try by adding android:noHistory="true" in your manifest and then finish your activity by uisng finish(); or finishAffinity();

Hope it helps....:)

Solution 17 - Java

Just call these two functions

 finish();
 moveTaskToBack(true);

Solution 18 - Java

Link this method to your quit/exit button

public void quitGame(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            finishAndRemoveTask();
        } else {
            finish();
        }
    }

Solution 19 - Java

ghost activity called with singletop and finish() on onCreate should do the trick

Solution 20 - Java

It works using only moveTaskToBack(true);

Solution 21 - Java

Instead of System.exit(1) Just use System.exit(0)

Solution 22 - Java

finish();
 finishAffinity();
 System.exit(0);

worked for me

Solution 23 - Java

If someone still wonders, for Xamarin.Android (in my case also Monogame running on it) the command FinishAndRemoveTask() on Activity does the job very well!

Solution 24 - Java

in the fragment

getActivity().finishAndRemoveTask();

in the Activity

finishAndRemoveTask();

Solution 25 - Java

just use the code in your backpress

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

Solution 26 - Java

If you are using EventBus (or really any other pub/sub library) in your application to communicate between activities you can send them an explicit event:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

The only downside of this is you need all activities to listen to this event to call their own finish(). For this you can easily create shim activity classes through inheritance which just listen to this event and let subclasses implement everything else, then make sure all your activities inherit from this extra layer. The kill listeners could even add some extra functionality through overrides, like avoiding death on certain particular situations.

Solution 27 - Java

Just run the below two lines when you want to exit from the application

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

Solution 28 - Java

Just call this:

finishAffinity();

Solution 29 - Java

This can work I tried it too.

this.finishAffinity();

Solution 30 - Java

If you use both finish and exit your app will close complitely

finish();

System.exit(0);

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
QuestionPeakGenView Question on Stackoverflow
Solution 1 - JavaShreshth KharbandaView Answer on Stackoverflow
Solution 2 - JavaFayazView Answer on Stackoverflow
Solution 3 - JavaAnchit MittalView Answer on Stackoverflow
Solution 4 - JavaPir Fahim ShahView Answer on Stackoverflow
Solution 5 - JavaSai AdityaView Answer on Stackoverflow
Solution 6 - JavaAmon OlimovView Answer on Stackoverflow
Solution 7 - JavaKasunView Answer on Stackoverflow
Solution 8 - JavaAkeshwar JhaView Answer on Stackoverflow
Solution 9 - JavakathirView Answer on Stackoverflow
Solution 10 - JavaMahmood AliView Answer on Stackoverflow
Solution 11 - JavaAbdul KadirView Answer on Stackoverflow
Solution 12 - Javaazeem khanView Answer on Stackoverflow
Solution 13 - JavaGONealeView Answer on Stackoverflow
Solution 14 - JavaStan MalcolmView Answer on Stackoverflow
Solution 15 - JavaRishiraj PurohitView Answer on Stackoverflow
Solution 16 - JavaYesha ShahView Answer on Stackoverflow
Solution 17 - JavayounesView Answer on Stackoverflow
Solution 18 - JavaSihat AfnanView Answer on Stackoverflow
Solution 19 - JavaJesusSView Answer on Stackoverflow
Solution 20 - Javauser3856297View Answer on Stackoverflow
Solution 21 - JavaKaze TdrView Answer on Stackoverflow
Solution 22 - JavaprabhuView Answer on Stackoverflow
Solution 23 - JavaKonradView Answer on Stackoverflow
Solution 24 - JavaRodrigo GivisiezView Answer on Stackoverflow
Solution 25 - JavaSayoojView Answer on Stackoverflow
Solution 26 - JavaGrzegorz Adam HankiewiczView Answer on Stackoverflow
Solution 27 - JavaHassnain JamilView Answer on Stackoverflow
Solution 28 - JavaMuhammad NaveedView Answer on Stackoverflow
Solution 29 - JavaFree Games DevsView Answer on Stackoverflow
Solution 30 - JavaAbdullah alkışView Answer on Stackoverflow