2015-11-24 40 views
2

我有一个在Android中使用后退按钮的问题。我知道我可以使用onBackPress()方法来处理它,但我需要一种方法来执行onResume lifecyle中的后退按钮事件。我必须这样做的原因是,我已经从onResume方法的另一个类中启动了一个计时器。当我按下后退按钮时,此计时器应停止。但是当我使用onBackPress()方法来停止它时,我得到了一个N​​ullPointerException,因为定时器从未开始。当我使用一个按钮来停止onResume方法内的定时器时,定时器会正确停止。所以quastion是我可以使用另一个按钮而不是后退按钮? 或者当用户按下按钮时,如何使用onResume中的后退按钮事件?使用另一个按钮,而不是后退按钮

+0

你不能对其他生命周期方法中的关键事件作出反应,因为关键事件是在它们自己的回调中传递的,直到你从任何现有的UI线程回调中返回都不会发生。您很可能需要重新设计您的设计,并使用显式状态标志或隐式状态标志(例如,在您尝试使用它之前,看看导致您的NPE的事物是否非空) –

回答

1

不需要做这种额外的工作,如果你需要所有这些东西,只是因为定时器空指针在停止计时器之前写入条件如下。

让你的定时器变量public static然后

if(YouActivity.timer!=null) 
    YouActivity.timer.stop(); 
+1

这很简单说过。非常感谢你! –

1

您可能正在创建计时器作为原始Activity的变量或子项。当Activity暂停(或离开屏幕)时,该变量可能被破坏。这就是按钮工作的原因(相同Activity),而不是onBackPressed,在另一个Activity中调用。

您需要在另一个线程上运行的静态变量或全局变量 - 如ServiceApplication对象。 Application对象是最后一招,因此请首先查看Service

-1

尝试增加FLAG_ACTIVITY_CLEAR_TOP调用onBackPressed()

之前,从 http://developer.android.com/reference/android/content/Intent.html

如果设置,以及正在启动的活动在目前的任务已经运行,然后,而不是推出该活动的一个新实例,其上的所有其他活动将被关闭,并且这个意图将作为新的意图被传递到(现在在上面)旧活动。

0

我已经完全理解这个问题: -

  1. 我sugestiion这是需要解决的问题OnBackPressed()方法添加 第一点定时器将被杀死并停止方法。
+0

请澄清你的答案,并可能添加一些代码说明它。正如目前所写,很难理解你的意思。可能你应该把一个句子分成一系列步骤,以便它变得更清晰。 – YakovL