强制提前调用iOS设备上的后台任务过期处理程序进行测试



我正在测试和调试- beginBackgroundTaskWithExpirationHandler:中的过期块。

有没有一种方法可以强制Block调用,使其更快地发生,而不是每次需要调试时等待大约10分钟?

我对调试块中的实际代码不感兴趣,而是对调用序列和回溯等感兴趣。;这就是为什么我需要回调本身,但每次10分钟太长了!

模拟后台任务时间到期:

  1. 在控制器viewDidLoad上启动后台任务,并安排一个每1秒打印一次backgroundTimeRemainingTimer
  2. 将您的应用程序发送到后台
  3. 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(隐含或显式)调用过期处理程序中的代码。因此,如果在过期处理程序中调用了一个处理过期的方法。然后,您将为该方法设置一个计时器,以便在"后台任务"生命周期之外调用,但您只会模拟它。

最新更新