我在片段中运行倒数计时器,每次按下后退按钮onDestroy()
都会被调用并终止我的倒计时。当我再次启动我的应用程序时,一个新的活动已经开始并且倒计时消失了。
onDestroy() isFinished()
返回true
。
如果我按下主页按钮,这不会发生。
我怎样才能防止这种情况发生?使用服务?设置标志?覆盖后退按钮?我在这里迷路了。
我在片段中运行倒数计时器,每次按下后退按钮onDestroy()
都会被调用并终止我的倒计时。当我再次启动我的应用程序时,一个新的活动已经开始并且倒计时消失了。
onDestroy() isFinished()
返回true
。
如果我按下主页按钮,这不会发生。
我怎样才能防止这种情况发生?使用服务?设置标志?覆盖后退按钮?我在这里迷路了。
如果用户回击是因为他无论如何都想离开您的应用程序,那么您正在使用这种方法打破正常的 Android 生命周期。
但无论如何,您可以避免覆盖 onBackPressed 的行为并使 Back 键的行为类似于 Home 键。看看这里覆盖后退按钮就像主页按钮一样
当按下后退按钮时,活动/进程被破坏。所以是的,要解决这个问题,请使用 a Service
,如果此计时器继续运行至关重要,则使用 a Foreground Service
(需要一个常量Notification
)。AForeground Service
不能被销毁,Service
如果系统内存不足需要回收,则正常可以。根据我的经验,这种情况并不经常发生(尤其是在新设备上)。
您的计时器在 Activity 的上下文中运行,因此当 Activity 被销毁时,计时器也是如此。当 home 被按下时,活动被置于暂停状态,因此不同的动作。
移动到后台服务,该服务可以在需要时启动,并在活动被销毁时继续在后台运行。请注意,即使您有后台服务,如果需要内存,它仍然可能被设备杀死,因此您也需要处理它。
将倒数计时器与设备时间同步。这样,如果服务被破坏,您可以使用设备当前时间重新同步倒计时时间。
另请查看 AlarmManager,它在这种情况下会很有用 - http://developer.android.com/reference/android/app/AlarmManager.html
你的活动的破坏是你无法控制的。它完全取决于垃圾收集器。如果它需要清理内存,并且您的活动在后台,它很可能会破坏它。
您应该使用服务startForeground(...)
以确保仅在绝对必要时才将其销毁。WakeLock
如果您想在屏幕锁定时保持其活动状态,也不要忘记在您的服务中获取一个。