我需要通过API检查后端以进行应用设置更新,因此我不确定在启动时执行此类检查是否足够,或者我需要在应用程序到达前台时立即执行此操作。当然,这取决于打开了多少个应用程序,设备功能,但是有什么规则可以确定应用程序可以在后台生存多长时间直到它被杀死?一个星期?
答案 0 :(得分:3)
没有一般规则,不能给你任何时间近似。此外,对于您来说,更重要的是系统可以为后台提取多少时间,因为后台应用程序会进入暂停状态。
如果我在iOS 7之前记得正确,那么你可以在后台请求时间长达10分钟,在iOS 7上它可以达到180秒,我还没有在新版本上亲自检查过。无论如何,时间不能保证。
答案 1 :(得分:3)
清单3-1在退出时启动后台任务
- (void)applicationDidEnterBackground:(UIApplication *)application { bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ // Clean up any unfinished task business by marking where you // stopped or ending the task outright. [application endBackgroundTask:bgTask]; bgTask = 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, preferably in chunks. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }); }
但是这种方法不允许永远运行
注意:在启动任务时始终提供过期处理程序,但如果您想知道应用程序剩余运行的时间,请获取UIApplication的backgroundTimeRemaining属性的值。
所以你需要使用以下技术之一
实施长期运行的任务
对于需要更多执行时间来实施的任务,您必须请求>在后台运行它们而不被暂停的特定权限。在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放用户可听内容的应用,例如音乐播放器应用
- 在后台录制音频内容的应用
- 随时向用户通知其位置信息的应用,例如导航应用
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部附件接收定期更新的应用
- 实施这些服务的应用必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面。
声明服务可让系统知道您使用的服务, 但在某些情况下,系统框架实际上是阻止的 你的申请被暂停。
在最后一种方法中,你仅限于你能做的事情
您可以在此处阅读有关实施长时间运行任务的信息