18

我创建了一个带有注销选项的 android 应用程序onCreateOptionsMenu。注销工作完美,但是当我再次按下后退按钮时,它会将我带到上一个活动,当它获得空值时,它会重定向到登录屏幕。现在我的登录屏幕一次又一次地出现。当我按下后退按钮时,我想完全关闭应用程序,但不知道如何操作。

这是我在登录屏幕中处理后退按钮按下的代码:

@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();
     }

请帮助伙计们..

4

7 回答 7

60

Quit Application单击按钮,请使用以下代码:

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

试试看..

要杀死整个应用程序并将其从Running应用程序列表中删除,请通过其pid(其讨厌的)杀死应用程序......在上述代码之前使用此行。

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
于 2014-01-15T06:33:48.637 回答
22

如果你想完全关闭应用程序,你应该使用finishAffinity();而不是finish() . 它将清除应用程序先前打开的所有活动堆栈。

于 2014-10-28T12:29:30.003 回答
8

对于 API 21 及更高版本

finishAndRemoveTask()

您可以调用它来完全关闭应用程序。所有活动都finish()将从任务列表中删除。

于 2018-04-02T01:17:10.147 回答
6

对于 Xamarin 用户:

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

把它放在你的OnDestroy()函数中。

编辑

在彻底调查之后,我发现即使我编写的上述代码也没有完全“杀死”应用程序(从任务管理器中删除它 - “最近的应用程序”)。最终,经过大量代码试验,我设法弄清楚了,用这段代码覆盖“完成”函数:

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

这是该问题的唯一解决方案!

于 2017-06-07T07:46:25.307 回答
5

要完成一项活动,我正在使用以下代码:

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

或使用以下代码杀死进程:

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
于 2014-01-15T06:39:11.397 回答
0

即使看起来不错,杀戮过程也会让你在未来感到头疼。您可以通过以下用例来确保这一点:

  1. 调用多个活动来填充活动堆栈
  2. 调用 android.os.Process.killProcess(pid);
  3. 打开你的应用程序

观察到:您的应用程序不是以不一致的方式从主要活动打开的。这是因为Android考虑像崩溃一样杀死进程。

您可以在此处找到更多详细信息: 退出应用程序是否令人不悦?

于 2014-06-03T12:46:02.413 回答
0
android.os.Process.killProcess(android.os.Process.myUid());

我认为这更好。这个怎么样 ?

于 2016-10-05T17:36:16.643 回答