BGProcessingTaskexpirationHandler - 我必须完成后台工作吗?或者稍后可以恢复吗?

问题描述 投票:0回答:1

我正在构建一个 BGProcessingTask,可能需要 5 分钟以上才能完成。处理任务在 Singleton 对象上运行,当应用程序位于前台时可以访问(甚至启动)该对象。

当任务expirationHandler被调用时,我必须在调用task.setTaskCompleted(success: false)之前完成我的后台工作吗?

我希望后台工作暂停而不是取消。因此,当我稍后重新安排另一个后台处理任务或应用程序移至前台时,相同的后台任务将继续。

练习可以吗?如果在调用task.setTaskCompleted()之前没有完成工作,iOS会杀死后台进程(和应用程序)吗?或者我可以相信它只会被暂停并能够稍后恢复吗?

亲切的问候

ios background-task bgprocessingtask
1个回答
0
投票

当您的过期处理程序被调用时,您应该通知您的处理任务停止其操作并尽快调用

setTaskCompleted

来自文档

在任务时间到期之前未调用 setTaskCompleted(success:) 可能会导致系统杀死您的应用程序。

在您的情况下,当您的过期处理程序被调用时,您应该指示您的对象停止其工作,保存其状态,以便它可以在稍后恢复并重新安排另一个处理任务(如果尚未这样做),然后再调用

 setTaskCompleted(success:false)

当下一个 BGProcessingTask 启动时,您的应用程序可能会在后台终止并重新启动,因此您不能仅仅依赖于您的应用程序被暂停。

© www.soinside.com 2019 - 2024. All rights reserved.