经过多次搜索后,我发现通过performFetchWithCompletionHandler获取后台获取,但我想知道如果我的应用程序被终止,这个功能会起作用吗?我的意思是如果我的应用程序处于关闭或终止状态,我该如何自动调用函数? / p>
答案 0 :(得分:12)
如果您的应用处于终止状态,则无法执行任何操作。 Apple在终止或关闭状态下不允许任何内容(接收通知除外)。
您也受到后台执行的限制。
您可以在后台模式下执行特定类型的任务,例如:Location update,Music playing, VOIP, finite length task, Newsstand downloads, etc
。您可以参考apple documentation了解有关后台执行的更多详细信息。
希望这会有所帮助:)
答案 1 :(得分:1)
当我在处理某个项目时,我需要这样做,不幸的是我没有 找到任何解决方案。
您可以在应用处于后台状态时运行任务(也可以使用有限的服务)但苹果不允许在应用终止时运行任务
请浏览链接。
这是为了后台运行。 Sending Latitude and Longitude to Server when app is in background
答案 2 :(得分:1)
一旦不执行任何与之相关的任务,您的应用就会终止。
Apple不支持它。
当您的应用未运行时,您无法调用函数。
所以它不可能由于苹果规则。
performFetchWithCompletionHandler
仅在应用程序运行时才起作用,如果您的应用程序被终止,它将不会执行任何类型的任务。
答案 3 :(得分:0)
你可以在应用终止状态找到位置,在大约500米的位置发生重大变化后。 这是工作示例
但我坚持的是通过网络服务发布位置。
答案 4 :(得分:-3)
@ Jack.Right你可以在每1小时后调用一次方法,所以使用NSTimeinterval会很有用!!
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
//create new uiBackgroundTask
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//run function methodRunAfterBackground
NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(methodRunAfterBackground) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});
}