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

Java 如何以编程方式退出Android应用程序?,java,android,eclipse,android-activity,Java,Android,Eclipse,Android Activity,我相信这个问题已经被问了很多次了,因为我读了一些。我的客户希望我在他的应用程序中添加一个按钮,用户可以点击并退出。我已经阅读并发现调用finish()就可以了。但是,finish只是关闭当前正在运行的活动,对吗?我有很多活动,所以在这种情况下,我必须传递每个活动的实例并完成它们,或者使每个活动成为单例模式 我还了解了活动。moveTaskToBack(true)可以让您进入主屏幕。好的,这不是结束,而是将过程背景化。那么这是有效的吗 我应该使用哪种方法完全关闭应用程序?上述任何方法或上述方法的任

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

我还了解了
活动。moveTaskToBack(true)
可以让您进入主屏幕。好的,这不是结束,而是将过程背景化。那么这是有效的吗


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

在onCreate上使用singletop和finish()调用的ghost活动应该可以完成此任务

您可以调用System.exit();摆脱所有的偏见

android.os.Process.killProcess(android.os.Process.myPid());
    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);

                }
            });

这太容易了。使用
系统退出(0)

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

  • 您可能希望退出活动
  • 或者您想退出应用程序
  • 您可以使用以下代码退出活动:

    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()); 
    
    对于mono开发,只需使用

    process.KillProcess(Process.MyPid());
    

    实际上,每个人都希望通过onclick事件关闭应用程序,无论活动在哪里

    将此代码添加到onclick事件:

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

    把这个放到你的onClic中:

    moveTaskToBack(true);
        finish()
    

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

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

    打电话试试这个。我有时一按按钮就用它

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    
    它不是关闭你的应用程序,而是打开仪表板,看起来你的应用程序已经关闭

    阅读这个问题以获得更清晰的答案

    只需在反压中使用代码即可

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

    它只使用
    moveTaskToBack(true)工作
    这个.finishafinity()怎么样

    从文件来看

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


    API 16中发布的finishAffinity方法关闭所有正在进行的活动并关闭应用程序:

    this.finishAffinity();
    
    完成此活动以及当前任务中紧靠其下方具有相同关联性的所有活动。当应用程序可以启动到另一个任务(例如,从其理解的内容类型的ACTION_视图)并且用户已使用向上导航切换出当前任务并进入其自己的任务时,通常使用此选项。在这种情况下,如果用户已向下导航到第二个应用程序的任何其他活动,则所有这些活动都应作为任务切换的一部分从原始任务中删除

    请注意,此完成不允许您将结果传递到上一个活动,如果您尝试这样做,将引发异常


    从API 21开始,您可以使用:

    finishAndRemoveTask();
    
    完成此任务中的所有活动,并将其从“最近的任务”列表中删除

    备选方案:

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



    资料来源:


    希望有帮助!祝你好运

    如果您在应用程序中使用(或任何其他发布/订阅库)在活动之间进行通信,则可以向它们发送显式事件:

    final public class KillItWithFireEvent
    {
        public KillItWithFireEvent() {}
    
        public static void send()
        {
            EventBus.getDefault().post(new KillItWithFireEvent());
        }
    }
    
    唯一的缺点是,您需要所有活动侦听此事件以调用自己的
    finish()
    。为此,您可以通过继承轻松地创建垫片活动类,该类只侦听此事件,并让子类实现其他所有内容,然后确保您的所有活动都从这个额外的层继承。kill侦听器甚至可以通过覆盖添加一些额外的功能,例如在某些特定情况下避免死亡。

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

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    System.exit(1);
    

    如果同时使用“完成”和“退出”,则应用程序将完全关闭

    完成()


    系统出口(0)

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

    当您想退出应用程序时,只需运行下面两行即可

    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
    
    使用这个。finishafinity();按那个按钮而不是按finish(); 如果它不起作用,那么您也可以尝试在清单中添加android:noHistory=“true”,然后通过使用finish()完成您的活动;或有限性()


    希望它能帮助……:)

    在Xamarin中实现。Android:

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

    为我工作

    如果还有人想知道的话,为Xamarin.Android工作(在我的例子中,它也运行Monogame)在
    活动
    上的
    FinishAndRemoveTask()
    命令做得很好

    在片段中

    getActivity().finishAndRemoveTask()

    在活动中


    finishAndRemoveTask()

    只需调用这两个函数即可

     finish();
     moveTaskToBack(true);
    
    就叫这个:

    finishAffinity();
    

    将此方法链接到“退出/退出”按钮

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

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

    这可以工作,我也尝试过


    this.finishafinity()

    为什么不使用操作栏。单击应用程序图标导航至主屏幕。单击“后退”按钮以打开exit@Raghunandan:正如我提到的,客户端要求:(检查这是否有助于android.os.Process.killProcess(android.os.Process.myPid());可能的dupl
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
    
        public override void OnBackPressed()
        {
            MoveTaskToBack(true);
            Process.KillProcess(Process.MyPid());
            Environment.Exit(1);
        }
    
    finish();
     finishAffinity();
     System.exit(0);
    
     finish();
     moveTaskToBack(true);
    
    finishAffinity();
    
    public void quitGame(View view) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                finishAndRemoveTask();
            } else {
                finish();
            }
        }
    
    Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(homeIntent);
    System.exit(1);