【问题标题】:How I Close entire Application On back Press?如何在后按时关闭整个应用程序?
【发布时间】:2013-08-21 13:07:50
【问题描述】:

我正在使用此代码退出整个应用程序。实际上,我尝试在我的应用程序的任何页面中退出应用程序。我正在尝试使用此代码..

请任何人帮助我。

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

【问题讨论】:

标签: android


【解决方案1】:

据我所知,Android 不支持选择退出应用程序。Android 操作系统本身会管理它。

但是,您可以考虑以下作为解决方法。

  1. 你可以通过对应的Intent调出Home应用:

    public void exitAppMethod(){
    
           Intent intent = new Intent(Intent.ACTION_MAIN);
           intent.addCategory(Intent.CATEGORY_HOME);
           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           startActivity(intent);
    }
    
    then you can call this method wherever you want. like
    
    @Override
    public void onBackPressed() {
     exitAppMethod()
    }
    
  2. 将以下代码放入每个活动的清单中,以便 应用程序未显示在最近的应用程序列表中。 (长按 主页按钮)

        <activity
        android:name=".your_Activity"
        android:label="@string/app_name"
        android:excludeFromRecents="true"/>
    

因此,每当用户尝试使用exitAppMethod() 退出时,用户将被带到主屏幕,同时该应用程序不会显示在最近的应用程序列表中。所以用户只需要从一开始就启动应用程序。

【讨论】:

    【解决方案2】:

    您需要维护应用程序的流程。如果在任何时候,您想在按下后退按钮时退出应用程序,那么您需要确保没有任何活动被推入堆栈。

    例如,您可以在移动到另一个活动时完成每个活动。这样您甚至不需要处理设备的后退按钮,用户将退出应用程序。

    【讨论】:

      【解决方案3】:

      如果你想关闭整个应用程序而不是每次启动一个新的时候都跟不上流量或杀死活动,你可以使用this解决方案:

      @Override
      public void onBackPressed() {
          Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
          intent.putExtra("EXIT", true);
          startActivity(intent);
      }
      

      然后在你的第一个活动的 onCreate 方法中做:

      if (getIntent().getBooleanExtra("EXIT", false)) {
          finish();
      }
      

      当然,您必须将 onBackPressed 代码放在要完全关闭活动的每个后退按钮中。

      【讨论】:

      • 这很好用,但如果我在回击后立即触摸启动屏幕上的图标,我的应用程序会崩溃。我不得不使用this.moveTaskToBack(true),而不是finish()
      【解决方案4】:

      假设您有像 A>B>C>D>E 这样的活动堆栈。你在活动 D,你想关闭你的应用程序。这就是你要做的 -

      在要关闭的活动中(活动 D)-

      Intent intent = new Intent(D.this,A.class);
      intent.putExtra("exit", "exit");
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
      startActivity(intent);
      

      在你的 RootActivity 中(即你的基础活动,这里是 Activity A) -

      @Override
          protected void onNewIntent(Intent intent) {
              super.onNewIntent(intent);
              if (intent.hasExtra("exit")) {
                  setIntent(intent);
              }
          }
      
          @Override
          protected void onResume() {
              super.onResume();
              if (getIntent() != null) {
                  if (("exit").equalsIgnoreCase(getIntent().getStringExtra(("exit")))) {
                      onBackPressed();
                  }
              }
          }
      

      【讨论】:

        【解决方案5】:

        如果您需要关闭应用,请使用finish();,或者从嵌套活动中关闭您的应用,您可以使用finishAffinity();

        【讨论】:

          【解决方案6】:

          有很多策略可以实现此功能: 假设一个例子:

          开始新活动时应用程序中的每个位置,即:

          startactivity(intent);
          

          在进入下一个活动之前完成当前活动:

           startactivity(intent);
           this.finish();
          

          以这种方式在应用程序中的任何位置,当您单击返回时,您的整个应用程序都将关闭:

          如果您对片段有任何想法,也可以使用 FragmentActivity,这也是一个好方法。

          【讨论】:

            【解决方案7】:

            您可以关闭所有 UI(活动),但您不能真正关闭您的进程。 System.exit(0);可能有效,但是当其他进程需要您提供资源时,该进程可以重新运行。 “关闭应用程序”不是一个好主意。您只能处理“ui 关闭”的事件。尝试定义所有活动的“计数”,在 onDestory 中“减少”它们。

                public class BasicActivity extends Activity {
             onCreate() {
                 mPreference.incActivityCount();//++
                 super.onCreate();
             }
            
             onDestory() {
                 mPreference.decActivityCount();//--
                 if( mPreference.getActivity() == 0 ) {
                     //All being opened Activities have been closed.
                     onAppHasNoUIs();
                 }
                 super.onDestory();
             }
            
             onAppHasNoUIs() {
                    //All being opened Activities have been closed.
             }
            }
            

            【讨论】:

              【解决方案8】:

              由于您没有提及您的活动流程,因此建议您在开始新活动时终止现有活动 ku finish() 方法。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-05-02
                • 2019-02-09
                • 1970-01-01
                • 1970-01-01
                • 2020-01-09
                • 2019-09-18
                • 2016-08-31
                • 1970-01-01
                相关资源
                最近更新 更多