How to exit the android application on backpress?

倖福魔咒の 提交于 2020-01-11 07:37:06

问题


The situation could be like say, I've 5 activities. Say Main activity, Activity 1, Activity 2, Activity 3 and Activity 4.

One can use the Activity 1,2,3 & 4 directly with the help of buttons so inserted on Main Activity layout.

Situation: User enters into the Main Activity, and presses a button to enter into Activity 2. Then he back presses and comes back to Main Activity. from there he now enters Activity 3 with the help of another button and similarly when he presses back button he enters into Main Activity.

Main Activity --> Activity 2 --> Main Activity --> Activity 3 --> Main Activity.

Problem: Now as the user enters from Activity 3 to Main Activity. The user is on Main Activity layout. And now if the user presses the back button on its phone, then it will take the following process to exit the app:

Main Activity --> Activity 3 --> Main Activity --> Activity 2 --> Main Activity --> EXIT

Needs to be done: I want to exit the app from the Main Activity itself, if the user presses the back button on its phone, then instead of following the above path to exit the app, I want that the user should be able to exit it from the Main Activity itself by displaying a simple AlertDialog box.

How could that be done, as I'm unable to find a solution to this problem?


回答1:


You need to Override onBackPressed() inside your MainActivity() and use finishAffinity to finish all activities

onBackPressed()

Called when the activity has detected the user's press of the back key.

finishAffinity() : added in API level 16

Finish this activity as well as all activities immediately below it in the current task that have the same affinity.

SAMPLE CODE

@Override
public void onBackPressed() {
  super.onBackPressed();
  ActivityCompat.finishAffinity(MainActivity.this);
}

EDIT

I want that the user should be able to exit it from the Main Activity itself by displaying a simple AlertDialog box.

@Override
public void onBackPressed() {

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
                .setTitle("Alert")
                .setCancelable(false)
                .setMessage("Are your sure want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.finishAffinity(MainActivity.this);
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });

        builder.show();

}



回答2:


add your MainActivity

@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}



回答3:


It is a good code practice to write double back press to exit Main Activity.

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
    super.onBackPressed();
    return;
}

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}




回答4:


this is commonly used way to exit the app, also i recommend using "nohistory" attribute in manifest for activities other than MainActivity.

boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }

this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        doubleBackToExitPressedOnce=false;                       
    }
}, 2000);

}

and for other activities use nohistory method in manifest

     <activity
        android:name="com.omniapay.salesservice.Activities.LoginActivity"
        android:label="LOGIN"
        android:noHistory="true" />


来源:https://stackoverflow.com/questions/50245631/how-to-exit-the-android-application-on-backpress

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!