如何以编程方式退出Android应用?

Pea*_*Gen 71 java eclipse android android-activity

我确信这个问题已经被问了很多次,因为我读了几个.我的客户希望我在他的应用程序中放置一个按钮,用户可以单击并退出.我已经读过这个,发现打电话finish()会这样做.但是,完成只关闭当前正在运行的活动吗?我有很多活动,所以在这种情况下,我必须传递每个活动的实例并完成它们或将每个活动变成Singleton模式.

我也知道Activity.moveTaskToBack(true)可以让你进入主屏幕.好的,这不是关闭,而是背景化过程.那么这是有效的吗?

我应该使用哪种方法完全关闭应用程序?上述方法中的任何一种方法或上述方法的任何其他方法/其他用法?

小智 61

实际上每个人都在寻找关闭onclick事件的应用程序,无论哪里可能是活动....

所以有朋友试试这段代码.将此代码放在onclick事件上

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 
Run Code Online (Sandbox Code Playgroud)

  • 这实际上不像PeakGen那样"完全关闭应用程序",因为应用程序仍在运行,但它是一个不错的选择 (7认同)
  • 这应该被标记为正确的答案. (2认同)
  • 我不这样认为,如果一项活动以“ FLAG ACTIVITY NEW TASK”开始,这种方式就无法退出 (2认同)

Anc*_*tal 43

你可以调用System.exit(); 摆脱所有的活动.

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(1);

                }
            });
Run Code Online (Sandbox Code Playgroud)

  • @AnchitMittal System.exit(1)不保证重置活动堆栈或任务(请参阅http://developer.android.com/guide/components/tasks-and-back-stack.html).因此,这种方法并不能保证在适当的时候正确关闭应用程序(销毁所有活动). (8认同)
  • 这只是带我参加第一项活动 (4认同)

Pir*_*hah 34

如果要退出应用程序,请在按下按钮的事件中使用此代码:

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)


Shr*_*nda 23

从api 16开始,你可以使用finishAffinity方法,它似乎非常接近通过名称和javadoc描述关闭所有相关活动:

this.finishAffinity();
Run Code Online (Sandbox Code Playgroud)

完成此活动以及当前任务中具有相同亲缘关系的紧接其下的所有活动.这通常在应用程序可以启动到另一个任务时使用(例如从它理解的内容类型的ACTION_VIEW),并且用户已经使用向上导航切换出当前任务并进入其自己的任务.在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动作为任务切换的一部分从原始任务中删除.

请注意,此完成不允许您将结果传递给上一个活动,如果您尝试这样做,则会抛出异常.


从api 21开始,您可以使用非常相似的命令

finishAndRemoveTask();
Run Code Online (Sandbox Code Playgroud)

完成此任务中的所有活动,并将其从最近的任务列表中删除.

备择方案:

getActivity().finish();
System.exit(0);
Run Code Online (Sandbox Code Playgroud)


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Run Code Online (Sandbox Code Playgroud)


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
Run Code Online (Sandbox Code Playgroud)


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

来源:如何以编程方式退出Android应用程序


希望能帮助到你!祝好运!

  • 不要使用 System.exit()。Android 将在应用程序退出后尝试重新启动该应用程序。你可能会陷入循环。 (5认同)

Sai*_*tya 22

 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                android.os.Process.killProcess(android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }
Run Code Online (Sandbox Code Playgroud)

  • System.exit(1)之间有什么不同; 和System.exit(0); (4认同)

Amo*_*mov 17

这太容易了.使用System.exit(0);

  • 哈哈哈。不太容易 (4认同)

Kas*_*sun 13

准确地说,有两种可能的情况:

  1. 您可能想退出活动
  2. 或者您想退出应用程序

您可以使用以下代码退出活动:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

但这不会杀死同一应用程序中的基础活动.这只会最小化应用程序.

如果要退出应用程序,请使用以下代码结束其进程:

android.os.Process.killProcess(android.os.Process.myPid()); 
Run Code Online (Sandbox Code Playgroud)

对于单声道开发只是使用

process.KillProcess(Process.MyPid());
Run Code Online (Sandbox Code Playgroud)


Ake*_*Jha 7

怎么样 this.finishAffinity()

从文档中

完成此活动以及当前任务中紧接其下的所有具有相同关联性的活动。通常,当可以将应用程序启动到另一个任务上时(例如从它了解的内容类型的ACTION_VIEW启动),并且用户已使用向上导航键切换出当前任务并转到自己的任务时,通常使用此方法。在这种情况下,如果用户已导航到第二个应用程序的任何其他活动,则应将所有这些活动从原始任务中删除,作为任务切换的一部分。请注意,此操作不允许您将结果传递到上一个活动,并且如果尝试这样做,将引发异常。


kat*_*hir 6

android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)


Jes*_*usS 1

在 onCreate 上使用 singletop 和 finish() 调用的 Ghost 活动应该可以解决问题