我正在测试和调试- beginBackgroundTaskWithExpirationHandler:
中的过期块。
有没有一种方法可以强制Block调用,使其更快地发生,而不是每次需要调试时等待大约10分钟?
我对调试块中的实际代码不感兴趣,而是对调用序列和回溯等感兴趣。;这就是为什么我需要回调本身,但每次10分钟太长了!
模拟后台任务时间到期:
- 在控制器
viewDidLoad
上启动后台任务,并安排一个每1秒打印一次backgroundTimeRemaining
的Timer
- 将您的应用程序发送到后台
- 当
backgroundTimeRemaining
小于X秒时,触发后台任务的操作
X可以通过测试何时触发过期处理程序来知道。因为不能保证backgroundTimeRemaining是准确的
代码:
UIApplication.shared.beginBackgroundTask(withName: "Submit Order Background Task") { [weak self] in
// Your logic to handle the expiration.
}
// To submit order 1 time!
var submitted = false
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (timer) in
print("background task timer: (UIApplication.shared.backgroundTimeRemaining)")
if UIApplication.shared.backgroundTimeRemaining < 2 && !submitted {
self.submitOrder()
submitted = true
}
}
如果您希望强制系统调用过期块,我认为这是不可能的。然而,我建议您隔离后台任务块,然后使用NSTimer
或进行调用
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
至少我会这么做。
也就是说,您将直接使用NSTimer
(隐含或显式)调用过期处理程序中的代码。因此,如果在过期处理程序中调用了一个处理过期的方法。然后,您将为该方法设置一个计时器,以便在"后台任务"生命周期之外调用,但您只会模拟它。