【问题标题】:Android - Prevent onResume when returning to app after home buttonAndroid - 在主页按钮后返回应用程序时阻止 onResume
【发布时间】:2015-09-24 10:27:20
【问题描述】:

在按下主页按钮后返回应用程序时,有什么方法可以防止在 onResume 中执行代码?
按下主页按钮时调用什么方法?按下主页按钮时,我可能会标记一些东西吗?

谢谢

【问题讨论】:

  • 您的具体要求是什么?能详细解释一下吗?
  • 我基本上不希望在用户按下主页按钮后返回应用程序后执行 onResume 中的代码。如果我可以使 boolean executeResumeCode = false;当按下主页按钮然后在调用恢复时设置条件来检查这个,我认为这会起作用

标签: android android-activity android-lifecycle onresume android-homebutton


【解决方案1】:

在覆盖上述方法后,现在您可以使用 onKeyDown() 方法在您的活动中轻松收听 HOME 按键。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {     

    if(keyCode == KeyEvent.KEYCODE_HOME)
    {
       //The Code Want to Perform. 
    }
});

希望这会有所帮助

【讨论】:

  • 您好,感谢您的回复,但在 Anroid 4.0 之后似乎已将其删除 :(
  • 但是您可以通过检查 Android 中当前正在运行的应用程序来做到这一点。您可以说,如果您的任务是长按主页按钮时显示的最近任务,则它被发送到后台。因此,在您尝试检测按下的主页按钮的活动的 onPause() 中,您可以检查应用程序是否已发送到后台。 @Override public void onPause() { if (isApplicationSentToBackground(this)){ // 在检测到 Home Key 被按下时做你想做的事情 } super.onPause(); }
【解决方案2】:

感谢大家的帮助

我设法通过创建一个布尔值 executeOnResume 来解决这个问题,每次调用 onStop() 并关闭应用程序时我都会将其设为 false。然后,当再次打开应用程序时,我会在 onResume() 中检查这个布尔值的状态,以选择是否应该执行某些代码。

onStop()

 //-----application stopped
    @Override
    protected void onStop() {
        super.onStop();

        //do not execute onResume code when app opened again
        executeOnResume = false;
    }



onResume()

//-----application resumed
    @Override
    protected void onResume() {
        super.onResume();

        //if true
        if (executeOnResume) {

            //do something
        }

        else {

            //execute onResume true code the next time onResume is called. For example, returning from another activity

        }
    }

【讨论】:

    【解决方案3】:

    点击主页按钮会创建启动主屏幕的意图,然后启动该意图 正确。

    如果是这种情况,我希望在创建主屏幕时运行 onCreate() 方法 不必要。如果它已经在运行,它会被 onNewIntent() 调用。

    如果有人可以对这个问题提供一些启发,基本问题是当我点击主页按钮时是否调用 onResume() 或 onCreate() 每当任何活动从用户输入的角度返回到前台时,都会调用 onResume()。主屏幕在这方面应该没有什么不同。

    onCreate() 在活动创建时被调用。现有活动不会被创建,而只是被带回前台。如果触发 Activity 返回前台的是 startActivity() 调用,则将使用 onNewIntent() 和 onResume() 调用该 Activity(通常是 onStart())。


    参考:Which method is run when Home button pressed?

    【讨论】:

      【解决方案4】:

      用户可以通过各种不同的方式离开您的应用。按 HOME 只是其中之一。来电将离开您的应用程序,下拉通知列表并按下一个将离开您的应用程序等。在所有这些情况下,当用户返回您的应用程序时,将调用onResume()。这是标准的 Android 行为,它告诉您的应用它现在位于前台并且对用户可见。

      如果您需要了解用户如何返回您的应用,那么您的架构就有缺陷。您可能需要将onResume() 中的一些代码移回onCreate()onNewIntent()

      【讨论】:

      • 谢谢。我知道这个。 onResume() 在 onCreate() 之后调用,每次用户返回应用程序时都会调用,但这不是我的问题。我的问题是,当用户按下主页按钮后返回应用程序时,如何防止 onResume() 调用某些代码,解决方案是在按下主页按钮时调用 onStop()(或应用程序关闭)如您所说的任何其他方式),因此如果我在调用 onStop 时将布尔值更改为 false 并在重新打开应用程序时检查 onResume 中的布尔值,我将能够告诉 onResume 是否执行某些代码
      • 嗯...不是真的。如果您的活动开始另一个活动,onStop() 也将被调用。所以我真的不明白这对你有什么帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      相关资源
      最近更新 更多