【问题标题】:how to finish all activities and close the application in android?如何在android中完成所有活动并关闭应用程序?
【发布时间】:2013-12-11 05:15:32
【问题描述】:

我的申请流程如下:

首页->屏幕 1->屏幕 2->屏幕 3->屏幕 4->屏幕 5>首页->屏幕 2->首页->屏幕 3

我的问题是,当我尝试关闭应用程序时,每次尝试关闭应用程序时 Home 活动都会打开。

我只想在用户在主屏幕上按下设备的返回键时关闭应用程序。

【问题讨论】:

标签: android android-activity activity-stack


【解决方案1】:

finishAffinity() 方法可以完成当前活动和所有父活动,但它仅适用于 Android 4.1 或更高版本。

【讨论】:

  • 仍然保留子活动...例如:mainactivity 启动模式为 singleInstance,设置菜单已启动,服务在 mainactivity 上调用 startactivity,mainactivity 调用finishAffinity...设置菜单未完成...这不是做作,我正在编写一个由蓝牙启动和完成的应用程序......似乎每个开放活动中的广播接收器都需要确保在所有情况下都关闭
【解决方案2】:

这对我很有效。

  • 您应该使用FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK 标志。

    Intent intent = new Intent(SecondActivity.this, CloseActivity.class);
    //Clear all activities and start new task
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent);
    
  • CloseActivity 活动的onCreate() 方法。

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish(); // Exit 
    }
    

【讨论】:

  • intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);为我工作。
【解决方案3】:

使用finishAffinity() 方法将完成当前活动和所有父活动。但它仅适用于 API 16+ 意味着 Android 4.1 或更高版本。

API 16+ 使用:

finishAffinity();

API 16 以下使用:

ActivityCompat.finishAffinity(this); //with v4 support library

退出整个应用程序:

finishAffinity(); // Close all activites
System.exit(0);  // Releasing resources

【讨论】:

    【解决方案4】:

    有时finish() 不工作

    我已经用

    解决了这个问题

    finishAffinity()

    不要使用

    System.exit(0);
    

    它将在没有动画的情况下完成应用程序。

    【讨论】:

      【解决方案5】:

      要在打开新活动时清除所有活动,请执行以下操作:

      Intent intent = new Intent(getApplicationContext(), YourActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      startActivity(intent);
      

      【讨论】:

        【解决方案6】:

        在您的活动清单文件中添加android:noHistory="true"

        【讨论】:

        • 我敢打赌,当他按下返回键时,他想回到上一个屏幕,但只有在主屏幕上时才关闭它们。
        【解决方案7】:

        您可以尝试使用 Intent.FLAG_ACTIVITY_CLEAR_TASK http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK 启动屏幕 3

        【讨论】:

          【解决方案8】:

          您好,如果您在片段中并且无法按原样使用finish 方法(因为finish 应该可以解决您的问题),那么您可以在startActivity(intent); 之后使用getActivity.finish() 方法。 如果您不在片段中,则可以在startActivity(intent); 行之后直接使用finish()

          【讨论】:

            【解决方案9】:

            有两种方法可以解决您的问题

            1) 在每个活动的 startActivity(intent) 之后调用 finish()

            2) 在清单文件的每个标签中设置 android:launchMode="singleInstance"

            我认为第二种方法最适合解决问题,但您也可以使用第一种方法

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-06-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多