颤振-计时器意外暂停

时间:2019-07-30 10:18:30

标签: flutter timer

我已经实现了一个计时器,如下面的文章中所述,以便当我更改选项卡时该计时器将继续运行。 How to implement persistent stopwatch in Flutter?

我有一个问题,就是计时器只有在未插入计算机的情况下才会“丢失”或暂停时间。当我将其插入计算机时,模拟器也可以正常运行。我对照计算机或手机上的计时器测试了颤动计时器,并在5分钟后匹配了它们。但是,当我的手机(Galaxy S9)没插上电源时,经过5分钟的实时运行,抖动计时器可能最多只能持续2分钟,当我回到应用程序中时,计时器正在运行,但计时器不会是应该的。它不会崩溃或重置,当我返回到应用程序时它会计数。我发现难以调试,因为将手机插入计算机似乎可以正常工作!有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我对此也有疑问。在模拟器上运行时,正常工作的东西是愚蠢的。除非您进行特定的工作以使其保持运行,否则计时器不会在后台运行。这是Flutter在后台进行工作的官方页面:https://flutter.dev/docs/development/packages-and-plugins/background-processes

答案 1 :(得分:0)

我建议实现didChangeAppLifecycleStateWidgetsBindingObserver方法,并检测应用何时进入后台以及何时回到前台。在应用程序进入后台的那一刻,您可以保存当前时间,例如( onPauseTime )(可以在此处使用SharedPreferences)和计时器上的持续时间(timerDurationLeft)。

当应用重新回到前台时,您会检查计时器是否在应用进入后台状态之前运行(如果已运行),然后检查当前时间,例如( onResumeTime )并计算time difference(以秒为单位)( onResumeTime-onPauseTime ),使用时差和 timerDurationLeft ,您可以计算出计时器还有多少时间可以运行,并且您启动/从该点恢复计时器,或者如果时间已经过去,则将计时器结束/将其设置为0:00。

P:S如果您打算在中间执行某些操作(例如在计时器即将完成的某个时刻设置通知),则可以使用后台服务。