在ios中编写后台服务

Posted

技术标签:

【中文标题】在ios中编写后台服务【英文标题】:Writing background service in ios 【发布时间】:2016-02-09 06:47:26 【问题描述】:

我们能否在 ios 中编写后台服务,该服务会在延迟(例如 1 分钟)后继续在后台运行。

我有一个应用程序,它在我想为其编写后台服务的每一分钟后获取数据。

与应用程序是否运行无关,虽然应用程序不在内存中,但服务应在 1 分钟后继续运行。

我在 android 应用程序中编写了相同的服务,但我不知道在 ios 中是否可行。

【问题讨论】:

【参考方案1】:

不,您不能,iOS 决定您的应用何时可以获取。 检查"Background Fetch mode" in this article.

【讨论】:

【参考方案2】:

好吧,实际上这取决于您要执行的任务。要点是您不能永久在后台执行任何任务。在您需要请求的时间间隔内。 您可以在后台执行一些任务,例如下载等。您需要使用dispatch_async - (void)applicationDidEnterBackground:(UIApplication *)application 之类的东西

- (void)applicationDidEnterBackground:(UIApplication *)application

    bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^
        // Clean up any unfinished task business by marking where you
        // stopped or ending the task outright.
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    ];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

        // Do the work associated with the task, preferably in chunks.

        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    );

有关有限任务等更多细节,您可以在以下链接中的苹果文档中找到。

BackgroundExecution

您还可以通过以下链接获得更多关于后台服务的帮助。

running-background-services-in-ios

【讨论】:

以上是关于在ios中编写后台服务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios 中永远运行后台服务以同步数据

在 iOS 中运行后台服务

ios12后台定位服务停止

在启动时在iOS中启动位置感知后台服务

一段时间后如何在iOS中停止后台服务

后台 IOS / php 服务器中的 GCM 通知