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

时间:2013-07-18 09:30:13

标签: java android eclipse android-activity

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

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

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

31 个答案:

答案 0 :(得分:55)

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

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

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 

答案 1 :(得分:40)

你可以调用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);

                }
            });

答案 2 :(得分:31)

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

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

答案 3 :(得分:20)

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

答案 4 :(得分:17)

太简单了。使用System.exit(0);

答案 5 :(得分:12)

确实有两种可能的情况:

  1. 您可能想退出活动
  2. 或者您想退出应用程序
  3. 您可以使用以下代码退出活动:

    var intent = new Intent(Intent.ActionMain);
    intent.AddCategory(Intent.CategoryHome);
    intent.SetFlags(ActivityFlags.NewTask);
    startActivity(intent);
    finish();
    

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

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

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

    单声道开发只需使用

    process.KillProcess(Process.MyPid());
    

答案 6 :(得分:11)

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

this.finishAffinity();
  

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

     

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


因为api 21你可以使用非常相似的命令

finishAndRemoveTask();
  

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

备选方案:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


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


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);

来源:How to quit android application programmatically


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

答案 7 :(得分:5)

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

答案 8 :(得分:5)

How about this.finishAffinity()

From the docs,

Finish this activity as well as all activities immediately below it in the current task that have the same affinity. This is typically used when an application can be launched on to another task (such as from an ACTION_VIEW of a content type it understands) and the user has used the up navigation to switch out of the current task and in to its own task. In this case, if the user has navigated down into any other activities of the second application, all of those should be removed from the original task as part of the task switch. Note that this finish does not allow you to deliver results to the previous activity, and an exception will be thrown if you are trying to do so.

答案 9 :(得分:3)

 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }

答案 10 :(得分:3)

使用this.finishAffinity();在那个按钮而不是完成(); 如果它不起作用,那么你也可以尝试在你的清单中添加android:noHistory =“true”,然后通过uisng finish()完成你的活动;或者finishAffinity();

希望它有帮助.... :)

答案 11 :(得分:2)

在Xamarin.Android中实现:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }

答案 12 :(得分:2)

通话时试试这个。我有时会在点击按钮时使用它。

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

它不是关闭你的应用程序,而是打开仪表板,看起来你的应用程序已关闭。

更清楚地阅读这个问题 android - exit application code

答案 13 :(得分:2)

将这个放入你的onClic:

moveTaskToBack(true);
    finish()

答案 14 :(得分:2)

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
System.exit(1);

使用此代码非常有用,您可以退出所有活动。

答案 15 :(得分:2)

这将清除Task(活动堆栈)并开始新任务

    public IASession(Request request) {
       super(request);
       Injector.get().inject(this);
    }

答案 16 :(得分:1)

如果有人仍然想知道,对于{strong> Xamarin.Android (在我的情况下也运行Monogame),FinishAndRemoveTask()上的命令Activity做得很好!

答案 17 :(得分:1)

仅使用moveTaskToBack(true);

答案 18 :(得分:1)

在onCreate上使用singletop和finish()调用的ghost活动应该可以做到这一点

答案 19 :(得分:0)

将此方法链接到您的退出/退出按钮

public void quitGame(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            finishAndRemoveTask();
        } else {
            finish();
        }
    }

答案 20 :(得分:0)

只需致电:

finishAffinity();

答案 21 :(得分:0)

只需添加以下代码:-

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

答案 22 :(得分:0)

Just call these two Function

 finish();
 moveTaskToBack(true);

答案 23 :(得分:0)

这个方法我也试过了。

this.finishAffinity();

答案 24 :(得分:0)

在片段中

getActivity()。finishAndRemoveTask();

在活动中

finishAndRemoveTask();

答案 25 :(得分:0)

如果要退出应用程序,只需运行以下两行

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);

答案 26 :(得分:0)

而不是System.exit(1)只需使用System.exit(0)

答案 27 :(得分:0)

如果您在应用程序中使用EventBus(或任何其他发布/子库)来在活动之间进行通信,则可以向他们发送明确的事件:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

唯一的缺点是你需要所有的活动来听这个事件来称呼他们自己的finish()。为此,您可以通过继承轻松创建 shim 活动类,只需监听此事件并让子类实现其他所有操作,然后确保所有活动都从此额外层继承。杀死侦听器甚至可以通过覆盖添加一些额外的功能,例如在某些特定情况下避免死亡。

答案 28 :(得分:0)

只需使用背压中的代码

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

答案 29 :(得分:-1)

finish();
 finishAffinity();
 System.exit(0);

为我工作

答案 30 :(得分:-1)

如果您同时使用完成并退出,您的应用将完全关闭

结束();

System.exit(0);