我正在构建一个 BGProcessingTask,可能需要 5 分钟以上才能完成。处理任务在 Singleton 对象上运行,当应用程序位于前台时可以访问(甚至启动)该对象。
当任务expirationHandler被调用时,我必须在调用task.setTaskCompleted(success: false)之前完成我的后台工作吗?
我希望后台工作暂停而不是取消。因此,当我稍后重新安排另一个后台处理任务或应用程序移至前台时,相同的后台任务将继续。
练习可以吗?如果在调用task.setTaskCompleted()之前没有完成工作,iOS会杀死后台进程(和应用程序)吗?或者我可以相信它只会被暂停并能够稍后恢复吗?
亲切的问候
当您的过期处理程序被调用时,您应该通知您的处理任务停止其操作并尽快调用
setTaskCompleted
。
来自文档:
在任务时间到期之前未调用 setTaskCompleted(success:) 可能会导致系统杀死您的应用程序。
在您的情况下,当您的过期处理程序被调用时,您应该指示您的对象停止其工作,保存其状态,以便它可以在稍后恢复并重新安排另一个处理任务(如果尚未这样做),然后再调用
setTaskCompleted(success:false)
。
当下一个 BGProcessingTask 启动时,您的应用程序可能会在后台终止并重新启动,因此您不能仅仅依赖于您的应用程序被暂停。