应用程序终止时执行后台任务

我正在为我的学校创build一个应用程序,如果网站上有新的标记,应该每n分钟检查一次。 要在用户首次login时执行此操作,实际标记的编号将保存在“UserDefaults”中。 当应用程序被终止时,在n分钟之后,标记的数量被重新logging并与前一个比较,并且在数字被改变的情况下发送通知。

我想知道是否有办法执行这个任务。 我已经尝试在-applicationWillTerminate中创build一个计时器,但它只被触发一次。 这是我试过的:

func applicationWillTerminate(_ application: UIApplication) { DispatchQueue.main.async { self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(AppDelegate.findMark), userInfo: nil, repeats: true) self.timer.fire() } } 

select器findMark是任务。

提前致谢!

你有两个select

  1. 后台程序刷新
  2. 无声推送通知

最简单的就是后台刷新。 因为以后需要服务器发送通知。 您可以检查以下API的使用情况。 基本上,您可以在应用程序的function/背景模式上设置后台抓取function。 然后,iOS会唤醒您的应用程序并调用application(_:performFetchWithCompletionHandler:)委托。 你将有大约30-45秒钟来调用你的函数和调用完成处理程序。 如果你没有按时完成,iOS会杀死你的应用程序。 如果你不遵守规则,iOS会让你起床的机会减less。 有关背景模式的更多详细用法,可以查看以下教程

应用程序终止后,无法执行类似于您的问题中所述的任务。 如文档中所述:

应用终止

应用程序必须随时准备终止,而不应等到保存用户数据或执行其他关键任务。 系统启动的终止是应用程序生命周期的正常部分。 系统通常会终止应用程序,以便可以回收内存并为用户启动的其他应用程序腾出空间,但是系统也可能会终止错误行为或不及时响应事件的应用程序。

暂停的应用程序在终止时不会收到通知; 系统杀死进程并回收相应的内存。 如果某个应用程序当前正在后台运行,并且未挂起,系统将在终止之前调用其应用程序委托的applicationWillTerminate:。 设备重新启动时,系统不会调用此方法。

除了系统终止您的应用程序,用户可以使用多任务UI来显式终止您的应用程序。 用户启动的终止与终止暂停的应用程序具有相同的效果。 应用程序的进程被终止,并没有通知发送到应用程序。

链接: https : //developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

编辑:

应用程序终止后,您不能执行任何任务。 你可以做的是从服务器端完成计算,并向设备发送Push Notification