如何完全关闭Android应用程序

时间:2014-01-15 06:29:04

标签: android back-button back-button-control close-application

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

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

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

请帮帮人..

7 个答案:

答案 0 :(得分:50)

要点击按钮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);

答案 1 :(得分:15)

如果您想完全关闭应用程序,则应使用finishAffinity();代替finish()。 它将清除以前由应用程序打开的所有活动堆栈。

答案 2 :(得分: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);

答案 3 :(得分:5)

对于Xamarin用户:

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

将其放入OnDestroy()功能。

修改

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

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

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

答案 4 :(得分:4)

适用于API 21及以上

finishAndRemoveTask()

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

答案 5 :(得分:0)

即使看起来没问题,杀戮过程也会让你在将来头疼。 您可以通过以下用例来确保这一点:

  1. 调用几个活动来填充活动堆栈
  2. 调用android.os.Process.killProcess(pid);
  3. 打开您的申请
  4. OBSERVED :您的应用程序不会以不一致的方式打开主要活动。这是因为Android会考虑像崩溃一样杀死进程。

    您可以在此处找到更多详细信息: Is quitting an application frowned upon?

答案 6 :(得分:0)

android.os.Process.killProcess(android.os.Process.myUid());

我认为这更好。 怎么样?