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 answers

9
Amresh 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
chiru 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
Pavel Polushkin 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
Mick Ashton 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
Anonymous 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
Yohan Pasindu 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
AlienKilleR On
android.os.Process.killProcess(android.os.Process.myUid());

I think this is better. How about it ?

0
Roy Doron 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!