ios - 应用程序中运行的计时器在一段时间后开始延迟触发,原因未知

标签 ios swift xcode timer alarm

我正在用 Swift 3 编写一个简单的闹钟应用程序。

我编写此应用程序的方式是,我设置了一个 60 秒的计时器,每次触发时,它都会检查是否为该时间设置了警报,然后触发警报。

此应用程序的目的是在我的 HomeKit 连接的灯亮起时将其打开。这就是为什么我不能采取设置本地通知的方法,因为执行时无法运行开灯的代码。

我将此应用程序设置为在后台运行(只要苹果允许),这样,如果您锁定手机时应用程序打开,它将继续运行。
即使在很长一段时间内,这在模拟器中也能完美运行。当我没有将闹钟设置得太远时,这也适用于我的手机。 然而,当我将应用程序留在手机上过夜时,它很少起作用。

为了调试此问题,我在应用程序中创建了一个文本文件,并设置了计时器,以便在检查时间时将时间写入该文本文件。

我这样做是为了看看计时器是否会继续运行一整夜。

这是我的结果。

昨晚,我凌晨 4 点上床 sleep ,并定了早上 8 点的闹钟。 (我知道这很好,哈哈) 在文本文件中,当我让应用程序运行时,计时器继续运行了整整半个小时,每一分钟都记录正确的时间。

为了方便阅读,我上传了屏幕截图。

http://imgur.com/a/lPAZD

注意它如何每分钟记录一次。

然而,到了晚上,计时器停止了每分钟的计时,并且开始变得更加零散。

http://imgur.com/a/8Emd9

注意计时器如何在5:13 am触发,然后5:25 am5:53等等。

过去几个晚上都发生了这种情况,我不知道该怎么办。

我没有收到任何短信,也没有收到任何其他我认为会导致计时器每分钟触发一次,随机每半小时触发一次的消息。

我可以做些什么来确保这个计时器每分钟可靠地触发一次?

如果您已经做到了这一点,非常感谢!这是我的第一个应用程序,要解决 Apple 的后台限制是很困难的。
谢谢!

最佳答案

你的方法是行不通的。 Apple 不允许您让应用程序在后台持续运行。这会很快耗尽用户的电池。您可能想设置本地通知。您可以将它们设置为将来随时关闭。

在最新版本的 iOS 中,Apple 调整计时器触发的时间以节省电池。我具体不知道如何从后台大幅改变计时器的间隔,但这听起来确实像是正在发生的事情。

关于ios - 应用程序中运行的计时器在一段时间后开始延迟触发,原因未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008925/

相关文章:

ios - AFNetworking 2.0 - 批量下载图片同时监控进度

ios - 进入后台时暂停WKWebView?

ios - 单击 tableview 中的 collectionview 单元格导航

ios - 在 UIImagePickerController 中添加左 UIBarButton

ios - 找不到 Availability.h 文件 - Xcode 4.6.1 - Objective-C

ios - 安装 Cocoa Pod 依赖项而没有它的子依赖项之一

ios - Swift 唯一防止 NSKeyedUnarchiver.decodeObject 崩溃的方法?

ios - 获取 3D 模型的高度及其转换后的屏幕坐标

swift - swift 4中两个节点之间的碰撞检测

iphone - 如何使用左侧或右侧移动UILabel?