我正在用 Swift 3 编写一个简单的闹钟应用程序。
我编写此应用程序的方式是,我设置了一个 60 秒的计时器,每次触发时,它都会检查是否为该时间设置了警报,然后触发警报。
此应用程序的目的是在我的 HomeKit 连接的灯亮起时将其打开。这就是为什么我不能采取设置本地通知的方法,因为执行时无法运行开灯的代码。
我将此应用程序设置为在后台运行(只要苹果允许),这样,如果您锁定手机时应用程序打开,它将继续运行。
即使在很长一段时间内,这在模拟器中也能完美运行。当我没有将闹钟设置得太远时,这也适用于我的手机。
然而,当我将应用程序留在手机上过夜时,它很少起作用。
为了调试此问题,我在应用程序中创建了一个文本文件,并设置了计时器
,以便在检查时间时将时间写入该文本文件。
我这样做是为了看看计时器是否会继续运行一整夜。
这是我的结果。
昨晚,我凌晨 4 点上床 sleep ,并定了早上 8 点的闹钟。 (我知道这很好,哈哈) 在文本文件中,当我让应用程序运行时,计时器继续运行了整整半个小时,每一分钟都记录正确的时间。
为了方便阅读,我上传了屏幕截图。
注意它如何每分钟记录一次。
然而,到了晚上,计时器停止了每分钟的计时,并且开始变得更加零散。
注意计时器如何在5:13 am
触发,然后5:25 am
、5:53
等等。
过去几个晚上都发生了这种情况,我不知道该怎么办。
我没有收到任何短信,也没有收到任何其他我认为会导致计时器每分钟触发一次,随机每半小时触发一次的消息。
我可以做些什么来确保这个计时器每分钟可靠地触发一次?
如果您已经做到了这一点,非常感谢!这是我的第一个应用程序,要解决 Apple 的后台限制是很困难的。
谢谢!
最佳答案
你的方法是行不通的。 Apple 不允许您让应用程序在后台持续运行。这会很快耗尽用户的电池。您可能想设置本地通知。您可以将它们设置为将来随时关闭。
在最新版本的 iOS 中,Apple 调整计时器触发的时间以节省电池。我具体不知道如何从后台大幅改变计时器的间隔,但这听起来确实像是正在发生的事情。
关于ios - 应用程序中运行的计时器在一段时间后开始延迟触发,原因未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008925/