gpt4 book ai didi

ios - 在 applicationDidEnterBackground : 上调度保存操作

转载 作者:可可西里 更新时间:2023-11-01 05:30:41 25 4
gpt4 key购买 nike

Apple 的文档"App States and Multitasking" (“移动到后台时要做什么”部分)说当应用程序进入后台时保存:

Save user data and app state information. All unsaved changes should be written to disk when entering the background. This step is necessary because your app might be quietly killed while in the background for any number of reasons. You can perform this operation from a background thread as needed.

当我开始分派(dispatch)操作时,例如保存在 applicationDidEnterBackground: 需要一些时间,如下所示按下主页按钮时我没有得到 NSLog 输出。返回应用程序后,出现 NSLog 输出。

- (void)applicationDidEnterBackground:(UIApplication *)application {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
}

我能否确定 performOperation 方法已完全执行,还是在应用进入休眠模式时中断?

最佳答案

确保将 plist 键设置 UIApplicationExitsOnSuspend 设置为 no 以确保调用 applicationDidEnterBackground

接下来确保您开始一项长时间运行的任务。在您的情况下,它看起来像这样:

- (void)applicationDidEnterBackground:(UIApplication *)application {
UIBackgroundTaskIdentifier __block bgTask = nil;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
}

这样您就可以告诉应用程序在您完成后停留 10 分钟。在十分钟结束时调用过期处理程序。

此外,您可以设置所需的后台模式键以获得更多时间。有许多技巧和变体可以让您有更多时间使用我上面提到的东西。

关于ios - 在 applicationDidEnterBackground : 上调度保存操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212672/

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