gpt4 book ai didi

ios - iOS上app确实进入后台时继续运行

转载 作者:可可西里 更新时间:2023-11-01 03:27:49 25 4
gpt4 key购买 nike

在我的应用程序中,我有一些 NSOperation 从在线数据库更新一些核心数据元素,有时更新需要几分钟,当 iPhone 屏幕锁定时,应用程序进入后台模式,此更新停止,所以我必须重新打开应用程序才能继续更新,所以我在堆栈溢出上搜索了很多,我找到了一些关于以下内容的信息:

beginBackgroundTaskWithExpirationHandler

这是苹果的一种方法,当应用程序处于后台模式时,它也可以继续执行某些任务,我已经这样做了:

- (void)applicationDidEnterBackground:(UIApplication *)application
{

UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}

现在应用程序在后台继续执行任务,似乎一切正常,所以我的问题是,我使用的这种方法安全吗?或者有更好的模式?

谢谢

最佳答案

那不是你做这件事的方式。任何要在后台运行的代码都必须正确包装。像这样:

- (void)someMethodToKeepRunningInBackground {
UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
// Uh-oh - we took too long. Stop task.
}];

// Perform task here

if (taskId != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:taskId];
}
}

您无需在 UIApplicationDelegate applicationDidEnterBackground: 方法中执行任何操作。

任何包装在“后台任务”调用中的任务都可以在应用进入后台时继续运行。

这是真正重要的部分 - 该任务最多只有 10 分钟。如果它在 10 分钟后仍在运行,您的应用程序将被终止。过期处理程序会给你几秒钟的时间来干净地结束任务,然后应用程序就会被不正常地终止。

关于ios - iOS上app确实进入后台时继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574974/

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