iOS 上的后台任务计时器

Background task timers on iOS

我有一个 android/winphone 申请。应用程序的一小部分(后台 broadcastreceiver/task)不时(大约 10-15 分钟)检查带有时间戳的本地文件,如果其中一个时间戳与当前时间之间的差异超过 - 比如说 - 30 分钟,它会显示给用户的通知。

在 Android 中,我使用 AlarmManager.setRepeating(...) 来设置定期检查,并且为了 运行 这个设置代码,我在 "android.intent.action.BOOT_COMPLETED" 中注册了一个 BroadcastReceiver on action显现。或者在每次启动时调用 AlarmManager.cancel(...) 和 AlarmManager.setRepeating(...)。这样我就可以确定我的计时器工作了。

在Windows Universal 我使用触发器和后台任务。其工作方式相同,但有一些限制。

现在我正在将我的应用程序移植到 iOS,快速查看并没有给我注册函数或 class 来执行快速检查的方法(通常不到一秒)在应用程序本身未启动时每 10 分钟一次,我还想在设备启动事件上注册一个函数。可能吗? 或者我应该让我的应用程序 运行ning 在后台运行吗?我不想这样做,因为我的支票很轻而且很少见。

您可以使用后台提取来快速执行。 但是也有几个缺点:

  1. 在睡眠模式下不工作。

  2. 您无法捕获设备启动事件。

  3. 30秒后掉线

我认为通常情况下这不是 AlarmManager 的模拟。算了。

https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

推送通知可以用作触发器。但是,尽管如此,这是一个服务器端实现。

在上面的指南中:

  1. 在您的应用功能的后台模式中勾选后台获取复选框。

  2. 使用setMinimumBackgroundFetchInterval(_:)设置适合您应用的时间间隔。

  3. 在您的应用委托中实施 application(_:performFetchWithCompletionHandler:) 以处理后台提取。

您的回调事件是performFetchWithCompletionHandler