iOS,ObjC:在后台运行的服务
我一直在构建一个流媒体应用程序,在那里我必须实现一个系统,该系统必须在午夜启动,在早上终止。我的问题是我不知道如何实现它 该系统必须在应用程序启动时保持监视,即使应用程序在后台运行,也必须继续运行 同时,我尝试实现一个计时器,它只运行了一段时间,并且在几次之后就消失了。我的应用程序不是VoiP或StandApp。正式地说,我没有运行无限服务的权利。无论如何,我需要一个解决方案,将调用一个方法在上午12点,它开始文件下载iOS,ObjC:在后台运行的服务,ios,objective-c,nstimer,uilocalnotification,Ios,Objective C,Nstimer,Uilocalnotification,我一直在构建一个流媒体应用程序,在那里我必须实现一个系统,该系统必须在午夜启动,在早上终止。我的问题是我不知道如何实现它 该系统必须在应用程序启动时保持监视,即使应用程序在后台运行,也必须继续运行 同时,我尝试实现一个计时器,它只运行了一段时间,并且在几次之后就消失了。我的应用程序不是VoiP或StandApp。正式地说,我没有运行无限服务的权利。无论如何,我需要一个解决方案,将调用一个方法在上午12点,它开始文件下载 //and create new timer with async call
//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
,但似乎必须有用户迭代。他必须接到通知
我需要一些建议,该走哪条路,如何把事情做好。先谢谢你 在非越狱设备上,无法实现您的目标。
如果您的应用程序未使用苹果提供的任何后台模式,则在应用程序被iOS暂停后,您将无法触发任何代码执行。
我猜您使用的是“应用程序播放音频”背景模式。即使启用此模式,如果您的应用程序未实际播放音频,应用程序也将暂停 TL;DR:如果没有用户在非越狱设备上的交互,就无法恢复暂停的应用程序 编辑:实际上,使用
后台提取
可以执行一些代码,但我非常确定,对于已挂起的应用程序,iOS永远不会允许您从后台提取
启动音频会话
编辑2:根据,您不能选择触发后台提取。iOS决定为您的应用程序触发它
应用程序执行后台提取的频率是
由系统决定。这取决于以下因素:
网络连接在该特定时间是否可用
设备是否处于唤醒状态
您的应用程序需要多少数据和时间
已接受以前执行后台提取的尝试
在里面
换句话说,您的应用程序完全取决于系统
为您安排后台提取。
此外,每次
应用程序使用后台获取,最多有30秒的时间
完成这个过程
在你的应用收到推送/本地通知后,iOS可以决定触发后台提取。但是它绝对不可靠(比如说根本不可靠)。谢谢您的回复。实际上,我需要启动的服务是文件下载。当我的应用程序处于后台时,如何在触发LocalNotification后提交后台提取?我需要实现哪个AppDelegate方法?对于本地通知,没有任何方法在通知触发时调用。应用程序永远不会知道何时触发本地通知。但一旦点击通知,应用程序将可以访问它。