【问题标题】:How to cancel timer when home button is pressed? [duplicate]按下主页按钮时如何取消计时器? [复制]
【发布时间】:2014-08-28 14:17:32
【问题描述】:

我的游戏中有一个倒数计时器,一旦按下主页按钮,我就必须取消它。我试过这个:

@Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        timer.cancel();
    }

但这对我不起作用,因为我有一些弹出活动和其他一些东西,因此我失去了主要活动的焦点,导致计时器停止,这对我不利。有没有办法只在按下主页按钮时停止我的计时器?

【问题讨论】:

  • 同时移除定时器回调;

标签: java android


【解决方案1】:

试试这个

@Override
public void onStop() {
     super.onStop();
     timer.cancel();
}

【讨论】:

  • 如果您不介意计时器在停止之前将运行多长时间,这将起作用。您无法确定何时会调用 onStop(),因此您的计时器可能会“用完”并触发某些行为,即使您的游戏现在处于后台。
【解决方案2】:

这是一种常见的问题类型,没有简单的内置解决方案。但是很容易自己编写。


基本解决方案依赖于监视所有活动的onPause()onResume() 事件。这通常可以通过使用实现以下行为的基类 Activity 来完成,并且您的所有活动都会扩展它。

我通常使用我的Application 类来处理知道它何时不再处于前台的逻辑。因此,在应用程序类中,我的活动每次暂停或恢复时都会被调用。

暂停时:

  • 我启动了一个短计时器,比如 300 毫秒长

恢复时:

  • 如果计时器正在运行,我会停止它

所以:

  • 如果您启动活动 B,您的 Application 课程将收到暂停信号,然后立即收到恢复信号。您的计时器不会过期。
  • 如果您的应用程序被发送到后台,您将收到一个暂停信号,而没有恢复信号。您的计时器将到期。

当计时器到期时,您知道您的应用程序在后台,并且您会采取行动。在您的情况下,这意味着取消游戏计时器。其他人将注销服务器。就我而言,我关闭了夜间模式。


您可以根据我对类似问题的回答来编写代码,该问题显示了每个活动如何提醒应用程序其状态:

在那个问题中,您可以看到正在设置一个布尔标志。在您的情况下,您将启动或停止计时器。

有关更多详细信息,请查看以下相关链接:

【讨论】:

    【解决方案3】:

    也许您应该在调用 Activity 的 onPause 或 onStop 方法时停止计时器。

    【讨论】:

    • 我现在试试,然后告诉你。
    • 我试过了,当弹出一个弹出窗口时它也会停止我的计时器,这不好。例如,如果广告打开,它将停止计时器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多