我一直在构建一个流媒体应用程序,我必须实现一个必须从午夜开始并在早上结束的系统。我的问题是我无法弄清楚如何实现它。
该系统必须在应用程序启动时保持监视,并在应用程序运行后继续运行。
与此同时,我试图实现一个计时器,它只运行一段时间,并在一段时间后死亡。我的应用程序不是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
,但似乎必须有用户迭代。他必须点击通知。
我需要一些建议,以及如何使事情恰到好处。先感谢您。
答案 0 :(得分:2)
在非越狱设备上,无法实现您想要做的事情
如果您的应用未使用Apple提供的任何后台模式,则在iOS暂停应用后,您将无法触发任何代码执行。
我猜你用#34; App播放音频"背景模式。即使启用此模式,如果您的应用实际上没有播放音频,该应用也会被暂停。
TL; DR: 无法在非越狱中恢复已暂停的应用,而无需用户的互动设备
编辑:实际上,可以使用Background Fetch
执行一些代码,但我非常确定iOS永远不会让您从{启动音频会话{1}}已暂停的应用。
编辑2:根据this article,您无法选择触发background fetch
。 iOS决定为您的应用触发它。
您的应用程序执行后台提取的频率是多少 由系统决定。这取决于以下因素:
在特定时间网络连接是否可用
设备是否处于唤醒状态 你的应用程序有多少数据和时间 已经采取了以前尝试执行后台获取的方法 在 换句话说,您的应用程序完全受系统的支配 为你安排背景提取。
另外,每次你的 应用程序使用后台获取,它最多有30秒到 完成这个过程。
iOS可以在您的应用收到推送/本地通知后决定触发Background Fetch
。但它绝对不可靠(就像,完全不同)。