我将BGTaskScheduler用于后台任务,如下所述:https://developer.apple.com/documentation/backgroundtasks/bgtaskscheduler
我的问题是:这个计划中的任务应该在设备重新启动之后还是在我手动关闭应用程序之后也能工作?如果没有,是否还有其他替代办法?
发布于 2020-05-26 10:47:46
不,在重新启动设备或手动关闭应用程序之后,不会自动执行或重新启动后台任务。
这是因为你的应用程序的State 将被修改为
AppDelegate在苹果文档中给出了各种方法,它处理应用程序的不同States (前台/背景/终止等)。
applicationWillTerminate(_ application: UIApplication)将在您的AppDelegate.swift文件中执行(因此,您可以设置一些操作来执行这些操作,这些操作将在应用程序被手动杀死之前执行)。注意,当它执行时,您的任意State任务也将被终止&您的应用程序的 Terminated与 -> Terminated不同。
State即使您的应用程序处于后台并执行任何applicationWillTerminate,如果设备关闭,应用程序甚至不会执行或任何 AppDelegate 方法。
发布于 2020-05-25 14:40:17
答案是否定的,我也不知道有别的选择。
我刚测试过:
我在1分钟后启动了一个后台任务,在后台任务处理程序中,我在用户默认值中设置了一个标志。然后我手动杀死了这个应用程序。
几分钟后,我打开了应用程序,读出了用户的默认设置,没有设置标志。
这向我表明,后台任务只有在没有被杀死的情况下才能启动,如果设备已经重新启动,同样的情况肯定也是如此。
发布于 2020-05-27 18:25:33
正如莱因哈德和纳扬所说,直截了当的回答是否定的。
还要注意:即使应用程序没有终止,任务也只有在系统决定运行时才会执行。执行时间不能保证。参考应用程序后台执行的进展
解决方案:处理后台执行的方法之一是在后台处理通知。
苹果从本地和远程通知编程指南中引用
当后台更新通知传递到用户的设备时,iOS会在后台唤醒您的应用程序,并给它30秒的时间运行。在iOS中,系统通过调用应用程序委托的
application:didReceiveRemoteNotification:fetchCompletionHandler:方法来传递后台更新通知。使用该方法启动获取新数据所需的任何下载操作。在后台处理远程通知需要向应用程序添加适当的后台模式。
https://stackoverflow.com/questions/61928130
复制相似问题