我找到了一些以编程方式退出Android应用程序的代码。通过在onDestroy()中使用以下任何代码,它会完全退出应用程序吗?

System.runFinalizersOnExit(真正的) (或) android.os.Process.killProcess (android.os.Process.myPid ());

我不想在点击退出按钮后在后台运行我的应用程序。 请告知我是否可以使用这些代码中的任何一个来退出我的应用程序?如果可以,我可以使用哪个代码?在Android中退出应用程序是一个好方法吗?


当前回答

finishAffinity ();

System.exit(0);

如果你只使用finishAffinity();没有system . exit (0);你的应用程序将退出,但分配的内存仍然会被你的手机使用,所以…如果你想要一个干净的,真正退出的应用程序,使用他们两个。

这是最简单的方法,在任何地方都适用,退出应用程序,你可以有很多活动打开仍然会退出所有没有问题。

示例对一个按钮进行单击

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

或者如果你想要一些漂亮的东西,例如一个警报对话框,有3个按钮是,否和取消

// alertdialog for exit the app
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

// set the title of the Alert Dialog
alertDialogBuilder.setTitle("your title");

// set dialog message
alertDialogBuilder
        .setMessage("your message")
        .setCancelable(false)
        .setPositiveButton("YES"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // what to do if YES is tapped
                        finishAffinity();
                        System.exit(0);
                    }
                })

        .setNeutralButton("CANCEL"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on CANCEL tapped
                        dialog.cancel();
                    }
                })

        .setNegativeButton("NO"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on NO tapped
                        dialog.cancel();
                    }
                });

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

其他回答

@Sivi的回答关闭了应用程序。但返回时,如果你有一些子活动,另一个未完成的活动可能会打开。我添加了noHistory:true到我的活动,所以应用程序在返回时从MainActivity开始。

<activity 
      android:name=".MainActivity"
      android:noHistory="true">
</activity>

这不是一个好的决定,因为它违背了Android的应用程序处理原则。Android不会终止任何进程,除非绝对不可避免。这有助于应用程序启动得更快,因为它们总是保存在内存中。因此,您需要一个非常特殊的理由来终止应用程序的进程。

只是在终止应用程序的残酷方法列表中添加一个:

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

我发现从一个活动中退出应用程序的最简单的方法是,不破坏Android的逻辑,也不需要在现有的活动中添加更多的代码和传递额外的东西:

public static void quitApplication (Activity currentActivity) {
    Intent intent = new Intent (currentActivity, QuitApplicationActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    currentActivity.startActivity (intent);
    currentActivity.finish ();
}

QuitApplicationActivity是:

public class QuitApplicationActivity extends AppCompatActivity {

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        finish ();
    }
}

我觉得你要找的是这个

activity.moveTaskToBack(Boolean nonRoot);