在后台 IOS 7 上执行间隔输出

Posted

技术标签:

【中文标题】在后台 IOS 7 上执行间隔输出【英文标题】:Executing Interval output on background IOS 7 【发布时间】:2014-02-20 03:17:09 【问题描述】:

好的,我没有得到关于这个的答案。 :(

Multipeer Connectivity audio streaming stop work on background

这个呢?

我正在尝试在后台运行此代码。

- (void)applicationDidEnterBackground:(UIApplication *)application 

    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^

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


    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

        NSTimer *aTimer = [NSTimer timerWithTimeInterval:3
                                                  target:self
                                                selector:@selector(showInformation)
                                                userInfo:nil 
                                                 repeats:YES];

        [[NSRunLoop mainRunLoop]
           addTimer:aTimer
           forMode:NSDefaultRunLoopMode];

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


显然我在同一个范围内定义了这个函数

- (void) showInformation 
  NSLog(@"showInformation is called.");

但是当我将应用程序放在后台时,间隔消息,停止工作,当我回到前台时继续工作.......

这意味着没有在后台运行?

这可能吗?还是我试图做一些愚蠢的不可能的事情?

非常感谢一些帮助。

非常感谢。

【问题讨论】:

【参考方案1】:

无论您的代码是否有效,您的后台任务都会在一段时间(>10 分钟)后被 ios 终止,除非您的应用中设置了 UIBackgroundModes(VOIP、定位服务、音频......)。

有关后台执行的更多信息,请查看Background Execution and Multitasking。

iOS7 中的另一个选项是使用Background Fetch,但您无法控制时间(iOS 使用了一个智能计时器)。

为了更好地理解,请查看 Raywenderlich 的Background Modes in iOS Tutorial。

如果您需要一些工作,请查看以下 SO 帖子:

How do I get a background location update every n minutes in my iOS application?

Running iOS App in background for more than 10 minutes

Will iOS launch my app into the background if it was force-quit by the user?

【讨论】:

好的,我明白了,我正在阅读所有这篇文章,但对我不起作用,这 10 分钟不起作用,这永远不会在后台运行,我启用了 VOIP,还有其他想法吗?谢谢 好吧,我只是想节省您的时间 ;),VOIP 对我来说很好用,但请注意您的应用应该是 VOIP 否则会被拒绝,这个解决方案应该适合您***.com/a/4808049/1262634跨度> 在启用 VOIP 后台模式的情况下执行代码时?您在后台模式下收到输出? ..... 问题中的代码每 3 秒打印一次,但是当您将应用程序置于后台时停止打印。问题是。是否有某种方法可以在一段时间内保持在后台模式下打印输出?

以上是关于在后台 IOS 7 上执行间隔输出的主要内容,如果未能解决你的问题,请参考以下文章

iOS 定位服务在后台以较小的间隔或距离发生

目标c:当应用程序在后台/基于时间间隔自动终止时如何执行功能

如何在 iPhone 的特定时间间隔内从后台执行位置

Shell多个命令间隔符号;、&、&&、 和 区别

Django 后台任务间隔

在 iOS 中,后台提取多久执行一次?