我使用BGTaskScheduler作为后台任务,如此描述:https://developer.apple.com/documentation/backgroundtasks/bgtaskscheduler
我的问题是:这个计划的任务在设备重新启动或我手动杀死应用程序后是否也能继续运行?如果不能,有其他替代方案吗?
我使用BGTaskScheduler作为后台任务,如此描述:https://developer.apple.com/documentation/backgroundtasks/bgtaskscheduler
我的问题是:这个计划的任务在设备重新启动或我手动杀死应用程序后是否也能继续运行?如果不能,有其他替代方案吗?
不,如果您重新启动设备或手动杀死应用程序,则不会执行或自动重新启动任何后台任务。
这是因为这时您的应用程序的状态
已更改。
在Apple文档中提供了AppDelegate
的各种方法,用于处理应用程序的不同状态
(前台/后台/终止等)。
AppDelegate.swift
文件中执行applicationWillTerminate(_ application: UIApplication)
(因此,您可以设置一些操作,这些操作将在应用程序被手动关闭之前执行。)请注意,当它执行时,您的任何后台任务也将终止,并且您的应用程序的状态
从后台
更改为终止
状态
即使您的应用程序处于后台并执行任何BGTask,如果设备关闭,应用程序也不会执行applicationWillTerminate
或任何AppDelegate
方法
如Reinhard和Nayan所说,对于这个问题的直接答案是NO。
需要注意:即使您的应用程序没有被终止,任务也只能在系统决定运行它时执行。无法保证执行时间。详见App后台执行的改进。
解决方案: 处理后台通知是处理后台执行的一种方式。
苹果引用自本地和远程通知编程指南
当向用户设备传递后台更新通知时,iOS会在后台唤醒您的应用程序,并给予30秒的运行时间。在iOS中,系统通过调用您的应用程序委托的
application:didReceiveRemoteNotification:fetchCompletionHandler:
方法来传递后台更新通知。使用该方法开始任何下载操作以获取新数据。在后台处理远程通知需要将适当的后台模式添加到应用程序中。