NSRunLoop 用于后台任务有效

Posted

技术标签:

【中文标题】NSRunLoop 用于后台任务有效【英文标题】:NSRunLoop for background task valid 【发布时间】:2015-12-22 06:01:01 【问题描述】:

我试图让我的 ios 应用程序在后台永远运行,(或关于位置的位置采样和诊断)我找到了这段代码 -

 [self.locationManager stopUpdatingLocation];
 self.timer = [NSTimer scheduledTimerWithTimeInterval:self.currentTimerTime target:self selector:@selector(checkLocation) userInfo:nil repeats:NO];
 [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
 [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil];

这很好用,但我觉得苹果不喜欢这样,这是最佳做法吗?

【问题讨论】:

【参考方案1】:

您可能已经发现,虽然这在开发中有效,但在生产中却不适用。应用程序获得beginBackgroundTaskWithExpirationHandler 获得有限的执行时间,在开发中不受限制,但在已发布的应用程序中通常为 60 秒,此时将调用到期处理程序(您未在示例代码中分配),并且您的应用程序是预期的使用beginBackgroundTaskWithExpirationHandler 调用返回的ID(您没有捕获)结束后台任务。否则将导致您的应用程序被终止。有关更多信息,请参阅此相关问题/答案。

objective c - Proper use of beginBackgroundTaskWithExpirationHandler

【讨论】:

以上是关于NSRunLoop 用于后台任务有效的主要内容,如果未能解决你的问题,请参考以下文章

在后台任务中设置壁纸

一个界面如何用于不同的后台android任务?

背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务)

用于较长任务的后台线程

背水一战 Windows 10 (120) - 后台任务: 后台上传任务

用于获取通知的通用 Windows 10 应用后台任务计时器