Java 如何在Android中正确实现计时器?

Java 如何在Android中正确实现计时器?,java,android,timer,Java,Android,Timer,我正在尝试制作一个简单的应用程序来跟踪工作时间。 MainActivity具有一个表示计时器的文本视图和四个按钮,用于启动、暂停、恢复和停止 到目前为止,我有两个类用于建模计时器,TimerCountdown和TimerCountup(用于超时),它们使用android.os.CountDownTimer启动计时器,更新文本视图并触发系统通知,在用户完成后通知用户。TimerCountdown每秒更新tView,8小时后它将向用户发送通知,并启动TimerCountup以跟踪另外2小时的加班时间

我正在尝试制作一个简单的应用程序来跟踪工作时间。 MainActivity具有一个表示计时器的文本视图和四个按钮,用于启动、暂停、恢复和停止

到目前为止,我有两个类用于建模计时器,TimerCountdown和TimerCountup(用于超时),它们使用
android.os.CountDownTimer启动计时器,更新文本视图并触发系统通知,在用户完成后通知用户。TimerCountdown每秒更新tView,8小时后它将向用户发送通知,并启动TimerCountup以跟踪另外2小时的加班时间

如果应用程序在后台,确保这些计时器持续运行的正确方法是什么?我是否必须将这两个计时器类包装到一个服务中?如果是的话,我该怎么做,因为他们持有对上下文的引用,这显然是不允许的?不幸的是,
android.os.CountDownTimer的文档没有提到当应用程序进入后台时它的行为。为了在应用程序销毁后恢复进度,我最终可能会使用序列化对象,我只是不确定如何正确处理后台活动


另外,确保在计时器达到0后触发通知(如振动)的最佳方法是什么?该应用程序可能会在后台运行,或者被销毁。

如果我理解正确,您需要一个可以在后台运行的计时器,要做到这一点,您应该扩展服务类。有一个回答的问题与您的问题类似。您可以查看它

如果我理解正确,您需要一个在后台工作的计时器,要做到这一点,您应该扩展服务类。有一个回答的问题与您的问题类似。您可以查看它

谢谢,将两个计时器类重构为一个,将其扩展为服务并调用startForeground();做了我想做的工作,将两个计时器类重构为一个,将其扩展为一个服务并调用startForeground();做了我想做的事