IOS 13中的后台任务(BGTaskScheduler)

14

1
我不知道为什么这个问题被踩了。我认为这是一个有效且有趣的编程问题。顺便说一句,没有给出理由就踩人并不是很有用... - Reinhard Männer
3个回答

9

不,如果您重新启动设备或手动杀死应用程序,则不会执行或自动重新启动任何后台任务。

这是因为这时您的应用程序的状态已更改。

Apple文档中提供了AppDelegate的各种方法,用于处理应用程序的不同状态(前台/后台/终止等)。

  1. 如果您手动关闭应用程序,则将在您的AppDelegate.swift文件中执行applicationWillTerminate(_ application: UIApplication)(因此,您可以设置一些操作,这些操作将在应用程序被手动关闭之前执行。)

请注意,当它执行时,您的任何后台任务也将终止,并且您的应用程序的状态后台更改为终止

  1. 当我们关闭或重启设备时,那是一个外部事件,与您的应用程序无关,因此我们无法确定应用程序的状态

即使您的应用程序处于后台并执行任何BGTask,如果设备关闭,应用程序也不会执行applicationWillTerminate或任何AppDelegate方法


4
答案是否定的,我不知道有什么替代方案。 我刚刚进行了测试: 我在1分钟后启动了一个后台任务,在后台任务处理程序中,我在用户默认设置中设置了一个标志。 然后我手动杀死了应用程序。 几分钟后,我打开了应用程序并读取了用户默认设置,但是该标志未被设置。 这表明对于后台任务来说,只有它们没有被杀死才能启动到后台,如果设备已重新启动,则同样适用。

最小更新时间为15分钟。Flutter_background_service IOS注意事项:请记住,iOS没有像Android那样的长时间运行服务功能。因此,当应用程序处于后台时,无法保持其运行,因为操作系统会很快将其挂起。目前,该插件提供了onBackground方法,该方法将通过iOS提供的后台获取能力定期执行。它的执行速度不能超过15分钟,只能保持活动状态约15-30秒。 - user1544428

3

如Reinhard和Nayan所说,对于这个问题的直接答案是NO。

需要注意:即使您的应用程序没有被终止,任务也只能在系统决定运行它时执行。无法保证执行时间。详见App后台执行的改进

解决方案: 处理后台通知是处理后台执行的一种方式。

苹果引用自本地和远程通知编程指南

当向用户设备传递后台更新通知时,iOS会在后台唤醒您的应用程序,并给予30秒的运行时间。在iOS中,系统通过调用您的应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:方法来传递后台更新通知。使用该方法开始任何下载操作以获取新数据。在后台处理远程通知需要将适当的后台模式添加到应用程序中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接