gpt4 book ai didi

ios - SendSynchronousRequest 触发后台过期处理程序 - IOS

转载 作者:行者123 更新时间:2023-11-28 22:53:20 26 4
gpt4 key购买 nike

这就是我在应用程序进入后台时启动后台任务的方式,

   void applicationDidEnterBackground:(UIApplication *)application
{
btId = UIBackgroundTaskInvalid;
UIApplication* cuiApplication = [UIApplication sharedApplication];

void (^backgroundTimeRemainingExtenderHandler)() = ^() {

NSTimeInterval timeRemaining1 = [cuiApplication backgroundTimeRemaining];

if(btId != UIBackgroundTaskInvalid){
[proximityEngine StopEngine];
[cuiApplication endBackgroundTask:btId];
btId = UIBackgroundTaskInvalid;
}
};

btId= [cuiApplication beginBackgroundTaskWithExpirationHandler:backgroundTimeRemainingExtenderHandler];

if(bgmanager != nil){
[bgmanager BeginBackgroundTaskMainLoop];
}
}

我的问题是当我的后台任务调用时:

NSURLConnection 发送同步请求

即使还有更多时间,过期 block 也会被调用,我该如何防止这种情况发生?

问候,

詹姆斯

编辑:

阅读下面的答案后:我在查询剩余时间量时还有 596 秒,但 IOS 仍然调用过期 block 处理程序。

最佳答案

beginBackgroundTaskWithExpirationHandler: 是应用请求一点额外的后台时间以在进入后台后进行一些整理的方式。但是,iOS 保留决定为您提供多少时间(如果有的话)以及如果您未能在规定的时间内结束则终止您的进程的权利。

您不会无限期地在后台执行,也不会选择您自己的时间限制。您可以通过 backgroundTimeRemaining 查询分配给您的内容,但这几乎是全部内容。

根据 the documentation “在应用程序的剩余后台时间达到 0 之前不久”调用处理程序。所以你应该期望 backgroundTimeRemaining 不完全为零。

话虽这么说,如果您的 URL 连接尚未完成,那么您只是想在某处记录它未完成并在您下次从后台返回时处理错误,通常是重试。这是您的过期处理程序应该做的,并且需要快速完成。

然而,分配给您的应用的额外时间是没有商量余地的。

关于ios - SendSynchronousRequest 触发后台过期处理程序 - IOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11354598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com