我正在测试和调试- beginBackgroundTaskWithExpirationHandler:
.
有没有办法强制 Block 调用以便它更快地发生,而不是每次我需要调试它时等待大约 10 分钟?
我对调试块中的实际代码不感兴趣,而是对调用顺序和回溯等感兴趣;这就是为什么我需要回调本身发生,但每次 10 分钟太长了!
我正在测试和调试- beginBackgroundTaskWithExpirationHandler:
.
有没有办法强制 Block 调用以便它更快地发生,而不是每次我需要调试它时等待大约 10 分钟?
我对调试块中的实际代码不感兴趣,而是对调用顺序和回溯等感兴趣;这就是为什么我需要回调本身发生,但每次 10 分钟太长了!
模拟后台任务时间到期:
- 在控制器上启动您的后台任务
viewDidLoad
并安排每 1 秒Timer
打印一次。backgroundTimeRemaining
- 将您的应用程序发送到后台。
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
(隐含或显式)调用到期处理程序中的代码。因此,如果在过期处理程序中调用了处理过期的方法。然后,您将为在“后台任务”生命周期之外调用该方法设置一个计时器,但您只是模拟它。