【问题标题】:Android application Exit for home screenAndroid 应用程序退出主屏幕
【发布时间】:2012-10-10 07:02:01
【问题描述】:

我已经开发了 android 应用程序,菜单选项中有退出按钮。我想退出应用程序并在按下退出按钮时转到主屏幕。为此我使用过 以下方法

1.System.exit(0)

2.finish()

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

4.System.runFinalizersOnExit(true);

所有这些方法都直接应用到我的第一页而不是主屏幕。那么我应该怎么做呢?请帮帮我

【问题讨论】:

    标签: android process exit kill


    【解决方案1】:

    首先关闭一个 android 应用程序是不受欢迎的,因为后退按钮和主页按钮已经有点给你这个功能了。 但如果你需要,你可以这样做

    当用户希望退出所有打开的 Activity 时,他们应该按下一个按钮,该按钮会加载您的应用启动时运行的第一个 Activity。

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

    【讨论】:

      【解决方案2】:

      要返回主屏幕,您可以使用以下代码:

      // This you have to insert inside the exit button click event
          Intent intent = new Intent(Intent.ACTION_MAIN);
                          intent.addCategory(Intent.CATEGORY_HOME);
                          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                          startActivity(intent);
                          onQuitPressed(); 
      
      //This is the onQuitPressed method
      
      //to remove application from task manager
          public void onQuitPressed() {
      
              int pid = android.os.Process.myPid();
              android.os.Process.killProcess(pid);
          }
      

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        1) “退出”按钮是邪恶的。在 Android 中不需要它们。用户按下返回或主页。让 Android 来做导航。

        2) 永远不要使用 System.exit() 除非你有很好的理由并且你知道你在做什么。让 Android 做它自己的应用程序管理。

        3) 只需使用finish()。这是记录在案的推荐关闭应用程序的方法。

        【讨论】:

          【解决方案4】:

          System.exit(0) 应该可以工作,但不知道为什么它不能与您合作,替代解决方案是致电Home Intent,

          它会在主屏幕上重定向到您,但它将您的应用程序保持在后台,因此下次启动应用程序时,它将从您上次离开的位置开始。

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

          【讨论】:

          • @Lahiru 你的意思是intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这个?
          【解决方案5】:

          这个解决方案有一个技巧。

          使用 startActivityForResult(intent, 1) 方法启动每个 Activity 并覆盖 onActivityResult() 方法并在 onActivityResult() 中输入下面给出的代码

          @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
          
              if(resultCode == Activity.RESULT_CANCELED){
                  setResult(Activity.RESULT_CANCELED);
                  onBackPressed();
              }
          }
          

          并为每个活动设置一个结果onCreate()

          setResult(Activity.RESULT_OK);
          

          现在你要做的是你想要退出你的应用程序的 Activity 设置

          setResult(Activity.RESULT_CANCELED);
          

          并调用 onBackpress 方法

          onBackPressed();
          

          希望这将帮助您并解决您的问题。

          【讨论】:

            【解决方案6】:

            在所有情况下,使用第二个选项即finish()来终止当前活动并开始另一个活动,即StartActivity(new intent(this, whichActicityUwant.class)); then call finish();

            第三个选项用于杀死和强制关闭进入主屏幕的应用。 p>

            【讨论】:

              【解决方案7】:

              我知道我迟到了,但这就是我实现它的方式: 在您想要转到其他片段/活动的片段中使用它。

              @Override
                  public void onDetach() {
                      super.onDetach();
                      YourFragment pass = new YourFragment();
                      getActivity().getSupportFragmentManager().beginTransaction()
                              .replace(R.id.container_body, pass)
                              .addToBackStack("Your Fragment")
                              .commit();
                  }
              

              在使用上述方法后,现在在您现在的位置使用此方法:

              @Override
                  public void onResume() {
                      super.onResume();
                      if(getView() == null){
                          return;
                      }
                      getView().setFocusableInTouchMode(true);
                      getView().requestFocus();
                      getView().setOnKeyListener(new View.OnKeyListener() {
                          @Override
                          public boolean onKey(View v, int keyCode, KeyEvent event) {
              
                              if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
                                  Toast.makeText(getActivity(), "Exiting", Toast.LENGTH_SHORT).show();
                                  Intent intent = new Intent(Intent.ACTION_MAIN);
                                  intent.addCategory(Intent.CATEGORY_HOME);
                                  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                  startActivity(intent);
                                  return true;
                              }
                              return false;
                          }
                      });
                  }
              

              【讨论】:

                猜你喜欢
                • 2011-03-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-03
                • 1970-01-01
                • 1970-01-01
                • 2019-10-19
                • 1970-01-01
                相关资源
                最近更新 更多