问题
自设置回调日期以来至少经过 X 时间时,我需要获得回调。
示例 1:这会很好用,但是可以通过将日期设置为早于现在的正确时间来触发块的执行:
let responseDate = Date().advanced(by: 60) // 1 min
OperationQueue.current.schedule(after: .init(responseDate), {
print("the time is now!") // possible to set the current date 1 min before
}
另一方面,从这个答案中获取当前正常运行时间的解决方案效果很好,但它需要不断运行计时器来检查我们是否接近最新状态。
是否可以将这两种方法结合起来并以某种方式“附加”一个回调KERN_BOOTTIME
,以便操作系统在boottime
达到某个值时调用我的方法?
我也在寻找满足两个标准的替代工程解决方案:
- 应该不可能通过将设备日期重置为过去的某个任意值来触发回调
- 如果设备已进入睡眠状态(例如通过按下开/关侧按钮),时钟仍应“滴答作响”,以便在应用程序在后台运行时回调该方法。
更多细节:
- 后台/应用程序终止超出范围
- 要点是通过在设置中向后切换日期来防止绕过。