【问题标题】:Exit android app on back pressed按下后退出 android 应用程序
【发布时间】:2014-01-21 08:54:52
【问题描述】:

我正在构建一个 Android 应用程序。按下返回时如何退出 Android 应用程序。安卓版本为2.3.3及以上。 Android 应用程序会转到我不想要的上一个活动。

【问题讨论】:

  • 清除后台堆栈。或在暂停呼叫完成时使用基本活动覆盖。从中扩展您的活动
  • finish()覆盖onBackPressed()

标签: android


【解决方案1】:

试试这个

public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

【讨论】:

  • 这个解决方案对我有用。我在AndroidManifest.xml 中为我的 WelcomeActivity 类添加了android:noHistory="true",但是从我的 WelcomeActivity 中按下后退按钮并没有关闭我的应用程序(这是我想要的);它会带我回到我的 MainActivity,这是我调用 startActivityForResult() 方法去 WelcomeActivity 的地方。我必须在 WelcomeActivity 类上使用您的解决方案才能让我的应用正确关闭。
  • 很好的解决方案。为我工作。
【解决方案2】:

按下后退按钮时您实际上不想再次打开的某些活动,例如启动屏幕活动、欢迎屏幕活动和确认窗口。实际上,您不需要在活动堆栈中使用它。您可以使用=> 打开 Manifest.xml 文件并添加属性来执行此操作

android:noHistory="true"

这些活动。

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

有时您想在按下某个后退按钮时关闭整个应用程序。这里最好的做法是打开主窗口而不是退出应用程序。为此,您需要重写 onBackPressed() 方法。通常,此方法会打开堆栈中的顶部活动。

@override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}

按下后退按钮时,您想退出该活动,并且您不想将其添加到活动堆栈中。在 onBackPressed() 方法中调用 finish()。它不会关闭整个应用程序,它只会转到堆栈中的上一个活动。

onBackPressed() - 当 Activity 检测到用户按下返回键时调用。

public void onBackPressed() {
  finish();
}

【讨论】:

  • 我有一个欢迎屏幕活动,我将android:noHistory="true" 放在我的AndroidManifest.xml 文件中,但按下后退按钮不断将我带回我的 MainActivity。我还必须按照您的建议覆盖 onBackPressed() 方法,以便当我在欢迎屏幕活动中时,我的后退按钮关闭我的应用程序。我不知道为什么android:noHistory="true" 不起作用。
  • 很棒的代码老兄.. 退出应用程序 onbackpressed 的这段代码效果很好
  • 我已经为此苦苦挣扎了好几个小时,这太棒了,谢谢
【解决方案3】:

你可以这样做清除所有的后台堆栈。

@Override
public void onBackPressed() {
    finishAffinity();
}

【讨论】:

    【解决方案4】:

    我知道为时已晚,但没有人提到我使用的代码,所以它会帮助其他人。

    这个moveTaskToBack 与主页按钮一样工作。它使 Back 堆栈保持原样。

     public void onBackPressed() {
     //  super.onBackPressed();
        moveTaskToBack();
      }
    

    【讨论】:

      【解决方案5】:

      我找到了一个有趣的解决方案,可能会有所帮助。

      我在我的 onBackPressed() 中实现了这个

      finishAffinity();
      finish();
      

      FinishAffinity 移除现有活动与其堆栈的连接。然后完成可帮助您退出该活动。最终会退出应用程序。

      【讨论】:

      • 这对我有帮助。 :)
      • finishAffinity() 在调用 finish() 之前是最重要的。谢谢。
      【解决方案6】:

      如果您在历史记录中拥有多个屏幕并且需要忽略所有其他屏幕。 我推荐使用这个:

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

      【讨论】:

      • 对于我刚才遇到的问题似乎也是一个很好的答案。但是如何提示用户是否真的想退出呢?我想提示一个对话框,说明他是否真的喜欢退出。如果点击确定退出。取消保留在同一个活动中。
      【解决方案7】:
      // Finish current activity
      // Go back to previous activity or closes app if last activity
      finish()
      
      // Finish all activities in stack and app closes
      finishAffinity()
      
      // Takes you to home screen but app isnt closed 
      // Opening app takes you back to this current activity (if it hasnt been destroyed)
      Intent(Intent.ACTION_MAIN).apply {  
          addCategory(Intent.CATEGORY_HOME)
          flags = Intent.FLAG_ACTIVITY_NEW_TASK
          startActivity(this)
      }
      

      【讨论】:

        【解决方案8】:

        在正常情况下,您不应该关闭应用程序 - 用户将通过按 home 或按返回关闭您的活动将其移至后面。

        但您可以使用以下提示:

        1) 如果后栈中不需要旧的activity,则在启动新的activity后关闭它们:

        startActivity(newActivityIntent);
        finish();
        

        2) 如果您需要http://developer.android.com/reference/android/app/Activity.html#moveTaskToBack(boolean),您可以将任务移到后面(而不是关闭)

        3) 如果你真的需要它,你可以使用System.exit(0),但它强烈不推荐,通常说你有应用程序的架构问题。

        【讨论】:

          【解决方案9】:

          科特林:

           override fun onBackPressed() {
                  val exitIntent = Intent(Intent.ACTION_MAIN)
                  exitIntent.addCategory(Intent.CATEGORY_HOME)
                  exitIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
                  startActivity(exitIntent)
              }
          

          其他代码有问题,有些不行,有些需要API分类。

          【讨论】:

            【解决方案10】:

            moveTaskToBack() 现在是Deprecated

            使用:

            moveTaskToBack(true);
            

            【讨论】:

              【解决方案11】:

              弹出

                   @Override
                   public void onBackPressed() {
                   new AlertDialog.Builder(this)
                     .setTitle("Really Exit?")
                     .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) {
                  WelcomeActivity.super.onBackPressed();
                      }
                  }).create().show();
              

              }

              将 Class 设置为 App 顶部且无历史记录

              Intent launchNextActivity;
              launchNextActivity = new Intent(B.class, A.class);
              launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);                  
              
              launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
              startActivity(launchNextActivity);
              

              在此处输入代码 双击后按

              private static long back_pressed;
              @Override
              public void onBackPressed(){
              if (back_pressed + 2000 > System.currentTimeMillis()){
              super.onBackPressed();
              }
              else{
              Toast.makeText(getBaseContext(), "Press once again to exit", 
              Toast.LENGTH_SHORT).show();
              back_pressed = System.currentTimeMillis();
              }
              

              }

              【讨论】:

                【解决方案12】:

                只需在您的意图下使用代码finish(); 即可关闭活动。所以,它不会再出现。这解决了我的问题。

                startActivity(new Intent(SplashActivity.this, MainActivity.class));
                finish();
                

                【讨论】:

                  【解决方案13】:

                  您可以使用此代码退出应用程序。

                  @覆盖 public void onBackPressed()

                  {

                  finishAffinity();

                  System.exit(0);

                  }

                  【讨论】:

                  • 如果来自加载器活动,只需添加 super.onBackPressed()。
                  • 如果你打开了不同的activity,想要退出你所在的activity时关闭应用,可以使用我写的代码。
                  猜你喜欢
                  • 2014-01-02
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-08-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-11-29
                  • 1970-01-01
                  相关资源
                  最近更新 更多