如何在每1小时后调用一次功能?(斯威夫特)。应用程序终止时后台获取工作?

时间:2016-05-19 09:28:56

标签: ios swift ios9 background-fetch

我正在制作应用程序。它提供每一小时后获取数据的功能。所以,即使我的应用程序终止,我怎么称呼该功能?

经过多次搜索后,我发现通过performFetchWithCompletionHandler获取后台获取,但我想知道如果我的应用程序被终止,这个功能会起作用吗?我的意思是如果我的应用程序处于关闭或终止状态,我该如何自动调用函数? / p>

5 个答案:

答案 0 :(得分:12)

如果您的应用处于终止状态,则无法执行任何操作。 Apple在终止或关闭状态下不允许任何内容(接收通知除外)。

您也受到后台执行的限制。 您可以在后台模式下执行特定类型的任务,例如:Location update,Music playing, VOIP, finite length task, Newsstand downloads, etc。您可以参考apple documentation了解有关后台执行的更多详细信息。

希望这会有所帮助:)

答案 1 :(得分:1)

当我在处理某个项目时,我需要这样做,不幸的是我没有 找到任何解决方案。

您可以在应用处于后台状态时运行任务(也可以使用有限的服务)但苹果不允许在应用终止时运行任务

请浏览链接。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

这是为了后台运行。 Sending Latitude and Longitude to Server when app is in background

答案 2 :(得分:1)

一旦不执行任何与之相关的任务,您的应用就会终止。 Apple不支持它。 当您的应用未运行时,您无法调用函数。 所以它不可能由于苹果规则。 performFetchWithCompletionHandler仅在应用程序运行时才起作用,如果您的应用程序被终止,它将不会执行任何类型的任务。

答案 3 :(得分:0)

你可以在应用终止状态找到位置,在大约500米的位置发生重大变化后。 这是工作示例

http://mobileoop.com/getting-location-updates-for-ios-7-and-8-when-the-app-is-killedterminatedsuspended

但我坚持的是通过网络服务发布位置。

答案 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];
    });
}