什么是处理“打盹”功能的好方法?
Posted
技术标签:
【中文标题】什么是处理“打盹”功能的好方法?【英文标题】:What would be a good way to handle "snoozed" functions? 【发布时间】:2019-07-16 23:22:09 【问题描述】:到目前为止,我已经尝试了一些解决方案,但我不确定是否有“正确”的方法。我正在处理一个带有贪睡功能的待办事项列表。当我需要运行一个函数将其移动到不同的列表中时,每个任务都有一个“从贪睡中唤醒”的时间。
我尝试循环遍历每个任务并在 viewWillAppear
和/或 viewDidAppear
运行时移动它。这通常有效,但似乎偶尔会出错,并且在应用程序运行并且用户没有切换视图时不会发生。
我尝试使用Timer()
函数在实际特定时间移动项目,这仅在应用程序运行时有效。
我尝试使用performFetchWithCompletionHandler
在后台移动项目并每小时检查一次。
还有什么我应该尝试让这个运行更顺利的吗?它是所有这些的组合吗?如果是这种情况,我如何确保我不会同时移动两次?
【问题讨论】:
这个问题不适合 Stack Overflow 吗?我注意到有些人在投票,我不知道为什么。我应该发布我尝试过的代码示例吗?是不允许推荐吗? “我尝试使用 Timer() 函数在实际特定时间移动项目,这仅在应用程序运行时有效。”是的,但是当你来到前台,你发现贪睡时间已经过去,所以你只需移动项目并终止计时器,你就完成了。换句话说,你呈现出一种错觉,即一切都发生在正确的时间,这才是最重要的。 @matt 感谢您对投票的回复和解释。我将进行编辑以添加更多信息和示例。 为了解决您的最终评论,请确保您不会尝试在代码中同时移动两次项目;您正在移动项目以响应返回到前台或您正在移动项目以响应计时器触发。移动后台时取消计时器,只有在完成返回前台的处理后才重新启动它们。 @matt 当你说:“但是你来到前台,你发现打盹时间已经过去了”你的意思是我应该在applicationWillEnterForeground
运行时移动项目对吗?这是有道理的。
【参考方案1】:
一般来说,问题似乎是如何确保某事在某个日期时间发生。
计算出目标日期时间是什么,并将其写在某个稳定的地方(文件、用户默认值等)以及接下来要发生的事情。
看时钟。每分钟触发一次的计时器可能就足够了。只需看看时钟,看看那个时间是否已经过去。如果有,请执行此操作并删除说明此事件需要在此日期时间发生的信息。
如果应用进入后台,请停止计时器。
当应用再次进入前台时,检查您的日期时间。
如果时间已过,请执行此操作并删除说明此事件需要在此日期时间发生的信息。
如果没有,请再次启动计时器并继续观察时钟。
【讨论】:
以上是关于什么是处理“打盹”功能的好方法?的主要内容,如果未能解决你的问题,请参考以下文章
在 Genymotion 中测试打盹功能(Android 6.0 Marshmallow)