如何在ios中每n秒连续在后台线程中运行一个进程

Posted

技术标签:

【中文标题】如何在ios中每n秒连续在后台线程中运行一个进程【英文标题】:How to run a process in background thread continuously for every n secs in ios 【发布时间】:2014-03-31 06:12:40 【问题描述】:

我正在尝试在后台线程中运行该进程。我希望该过程在 60 秒内完成并重新开始运行。无论应用程序是在前台还是后台。我不知道如何实施以及在哪里实施。我正在使用 ios7。在此过程中,我也在进行位置更新。

我阅读了有关后台任务的信息,但它并没有给出正确的流程概念。有人可以提供给我好的来源或链接吗?

【问题讨论】:

你想让这个后台进程做什么 我需要将一些东西与我的数据库进行比较,并且还要在该过程中完成设备位置更新。 请提供一些代码,只是在前台和后台连续打印一些日志。 见***.com/questions/6347503/… 【参考方案1】:

ios 没有为后台进程提供这样的 api,这与使用服务的 android 不同。您可以使用 timer 连续后台进程。还有 dispatch_async ,后台选择器 用于高效的后台处理。

希望这会有所帮助。

【讨论】:

好的,我将在后台使用 dispatch_async ,选择器来实现它,但是当应用程序进入后台时该怎么办。请告诉我【参考方案2】:

你可以使用这样的东西进行后台处理,但记住苹果已经限制了 10-15 分钟来完成处理。

UIApplication*    app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^
        [app endBackgroundTask:task];
        task = 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.
        NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]);
        if (connectedToNetwork) 
            // do work son...
        

        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    );

您还可以检查以下内容:

**BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;**

【讨论】:

这不是一个长时间运行的任务。任务应该在 60 秒内完成并重新开始。它应该在前台和后台连续运行,即每 60 秒任务应该完成并重新开始。请帮助我。 您需要先检查应用程序是在后台还是前台,如果在后台,则输入上面的代码,如果在前台,您可以使用任何您喜欢的代码。Exp:Timer,selector thread,GCD . 那么如何连续运行该过程而不仅仅是 10 或 15 分钟。 在后台,你不能做超过 10-15 分钟的处理。Apple 限制你这样做。

以上是关于如何在ios中每n秒连续在后台线程中运行一个进程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 的后台线程中运行 XMPP Room Join & Invite 进程

如何在后台连续运行 C# 控制台应用程序

如何在 iOS 应用程序中每 n 分钟获取一次后台位置更新?

ios7如何在后台运行进程

如何在后台连续运行 ajax 请求?

在 iOS 中定期在后台线程中运行任务