how to close android app completely

46.1k Views Asked by At

I created an android application with a logout option in onCreateOptionsMenu. The Logout works perfectly but when I press the back button again it takes me to the previous activity, and when it gets a null value it redirects to login screen. Now my login screen appears again and again. I want to close the app completely when I press the back button but don't know how.

Here is my code to handle the back button press in the login screen:

@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle("BidNEMO")
        .setMessage("Are you sure you want to exit?")
        .setNegativeButton(android.R.string.no, null)
        .setPositiveButton(android.R.string.yes, new OnClickListener() {
         public void onClick(DialogInterface arg0, int arg1) {
         Main.super.onBackPressed();
         finish();
         }
         }).create().show();
     }

please help guyss..

9

There are 9 best solutions below

9
On BEST ANSWER

To Quit Application on Button click use this code :

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

Try it..

To kill the complete app and remove it from Runningapp list kill the app through its pid(its nasty)... use this lines before above code.

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

To Finish an Activity I'm using this code:

public void appExit () {
    this.finish();
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}  //close method

or kill Process with this code:

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

Even if it looks ok killing process will cause you headache in future. You can ensure this by following use case:

  1. call several activities to populate activities stack
  2. call android.os.Process.killProcess(pid);
  3. open your application

OBSERVED: Your application opens not from main activity in inconsistent way. This is because Android consider killing of process like crash.

You can find more detailed information here: Is quitting an application frowned upon?

0
On

Closing the application with process removal, it gives the result of a smooth closing and removal of all application processes after 100 milliseconds:

enter image description here


override fun exit() {
    coroutine.launch(Dispatchers.Main) {
        finishAndRemoveTask()
        delay(100)
        exitProcess(0)
    }
}
2
On

For API 21 and up

finishAndRemoveTask()

You can call this to close the app completely. All activities will finish() and the app is removed from the task list.

1
On

If you want to close application completely you should use finishAffinity(); instead of finish() . It will clear all stack of activities previously opened by an application.

0
On

In my case i used this method. It already worked for me. I use this technique with Jetpack Compose peoject.

val context = LocalContext.current

BackHandler {
    val intent = Intent(Intent.ACTION_MAIN)
    intent.addCategory(Intent.CATEGORY_HOME)
    context.startActivity(intent)
}
0
On
android.os.Process.killProcess(android.os.Process.myUid());

I think this is better. How about it ?

0
On

For Xamarin Users:

int pid = Android.OS.Process.MyPid();
Android.OS.Process.KillProcess(pid);

put it in your OnDestroy() function.

Edit:

After investigating it thoroughly, I found out that even the above code I wrote does not "Kill" the app totally (deleting it from task manager - "recent apps"). Eventually, after a lot of code tryouts, I managed to figure something out, Overriding "Finish" functions with this code:

public override void Finish()
    {
        if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
        {
            base.FinishAndRemoveTask();
        }
        else
        {
            base.Finish();
        }
    }

this is the sole solution for that question!