iOS,ObjC:服务在后台运行

时间:2015-07-20 08:37:08

标签: ios objective-c nstimer uilocalnotification

我一直在构建一个流媒体应用程序,我必须实现一个必须从午夜开始并在早上结束的系统。我的问题是我无法弄清楚如何实现它。

该系统必须在应用程序启动时保持监视,并在应用程序运行后继续运行。

与此同时,我试图实现一个计时器,它只运行一段时间,并在一段时间后死亡。我的应用程序不是VoiP或StandApp。官方说来,我无权运行无限服务。无论如何,我需要一个解决方案,它将在上午12点调用一个方法,然后开始下载文件。

//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:300 target:self selector:@selector(isNightFrame) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];
});

然后我尝试使用UILocalnotifications,但似乎必须有用户迭代。他必须点击通知。

我需要一些建议,以及如何使事情恰到好处。先感谢您。

1 个答案:

答案 0 :(得分:2)

在非越狱设备上,无法实现您想要做的事情 如果您的应用未使用Apple提供的任何后台模式,则在iOS暂停应用后,您将无法触发任何代码执行。
我猜你用#34; App播放音频"背景模式。即使启用此模式,如果您的应用实际上没有播放音频,该应用也会被暂停。

TL; DR: 无法在非越狱中恢复已暂停的应用,而无需用户的互动设备

编辑:实际上,可以使用Background Fetch执行一些代码,但我非常确定iOS永远不会让您从{启动音频会话{1}}已暂停的应用。

编辑2:根据this article,您无法选择触发background fetch。 iOS决定为您的应用触发它。

  

您的应用程序执行后台提取的频率是多少   由系统决定。这取决于以下因素:

     

在特定时间网络连接是否可用
  设备是否处于唤醒状态   你的应用程序有多少数据和时间   已经采取了以前尝试执行后台获取的方法   在   换句话说,您的应用程序完全受系统的支配   为你安排背景提取。
  另外,每次你的   应用程序使用后台获取,它最多有30秒到   完成这个过程。

iOS可以在您的应用收到推送/本地通知后决定触发Background Fetch。但它绝对不可靠(就像,完全不同)。