0

我在片段中运行倒数计时器,每次按下后退按钮onDestroy()都会被调用并终止我的倒计时。当我再次启动我的应用程序时,一个新的活动已经开始并且倒计时消失了。

onDestroy() isFinished()返回true

如果我按下主页按钮,这不会发生。

我怎样才能防止这种情况发生?使用服务?设置标志?覆盖后退按钮?我在这里迷路了。

4

4 回答 4

0

如果用户回击是因为他无论如何都想离开您的应用程序,那么您正在使用这种方法打破正常的 Android 生命周期。
但无论如何,您可以避免覆盖 onBackPressed 的行为并使 Back 键的行为类似于 Home 键。看看这里覆盖后退按钮就像主页按钮一样

于 2012-08-09T13:09:08.690 回答
0

当按下后退按钮时,活动/进程被破坏。所以是的,要解决这个问题,请使用 a Service,如果此计时器继续运行至关重要,则使用 a Foreground Service(需要一个常量Notification)。AForeground Service不能被销毁,Service如果系统内存不足需要回收,则正常可以。根据我的经验,这种情况并不经常发生(尤其是在新设备上)。

于 2012-08-09T13:10:51.257 回答
0

您的计时器在 Activity 的上下文中运行,因此当 Activity 被销毁时,计时器也是如此。当 home 被按下时,活动被置于暂停状态,因此不同的动作。

移动到后台服务,该服务可以在需要时启动,并在活动被销毁时继续在后台运行。请注意,即使您有后台服务,如果需要内存,它仍然可能被设备杀死,因此您也需要处理它。

将倒数计时器与设备时间同步。这样,如果服务被破坏,您可以使用设备当前时间重新同步倒计时时间。

另请查看 AlarmManager,它在这种情况下会很有用 - http://developer.android.com/reference/android/app/AlarmManager.html

于 2012-08-09T13:11:53.607 回答
0

你的活动的破坏是你无法控制的。它完全取决于垃圾收集器。如果它需要清理内存,并且您的活动在后台,它很可能会破坏它。

您应该使用服务startForeground(...)以确保仅在绝对必要时才将其销毁。WakeLock如果您想在屏幕锁定时保持其活动状态,也不要忘记在您的服务中获取一个。

于 2012-08-09T13:12:13.463 回答