Ios UIC应用程序。后台执行一段固定的时间
因此,我希望我的应用程序只在固定时间内执行后台执行,以防用户不手动停止应用程序,因此理论上应用程序可以永远在后台运行(这可能吗?) 我正在使用下面的代码(只是一个测试应用程序)测试一个后台任务在结束前可以运行多长时间。我在某个地方读到,10分钟是我们可以在后台执行的最长时间,没有办法超越这一点(?)。但是,我的代码只能在后台执行3分钟 总结一下我的问题:Ios UIC应用程序。后台执行一段固定的时间,ios,uiapplication,Ios,Uiapplication,因此,我希望我的应用程序只在固定时间内执行后台执行,以防用户不手动停止应用程序,因此理论上应用程序可以永远在后台运行(这可能吗?) 我正在使用下面的代码(只是一个测试应用程序)测试一个后台任务在结束前可以运行多长时间。我在某个地方读到,10分钟是我们可以在后台执行的最长时间,没有办法超越这一点(?)。但是,我的代码只能在后台执行3分钟 总结一下我的问题: 是否可以告诉应用程序在后台执行x>10分钟 2.我还有其他类似的选择吗?(我需要在其中实现的实际应用程序在后台接收位置更新,用户可以将手机置于
info.Plist
文件中添加Required background modes
属性。使用此模式,您将能够在后台运行应用程序以获取位置更新。苹果将在审查应用程序以提交应用程序商店时审查您的请求。因此,请确保仅当您出于实际目的使用此模式时,才使用此模式
以下是apple允许后台执行的各种模式,您可以查看一下
编辑
如果您希望在用户进入后台后的特定时间后停止获取位置更新,您可以这样做
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self performSelector:@selector(stopGettingLocationUPdates) withObject:nil afterDelay:1800];
}
-(void)stopGettingLocationUPdates{
[self.locationManager stopUpdatingLocation]
}
这将在30分钟后停止更新。您的代码没有在后台运行。它不是测试你想要测试的东西 苹果说: 在后台应用程序中执行有限长度任务 转换到后台可能需要额外的时间来完成 完成任何重要的最后一分钟任务。索取背景资料 执行时间,调用 beginBackgroundTaskWithName:expirationHandler:的方法 UIC应用程序类 您得到的实际时间没有指定,可能是根据功耗、内存需求等临时决定的。它们可能是最大值 他们接着说: 为需要更多资源的任务实施长时间运行的后台任务 要执行,您必须请求特定的权限才能执行 在后台运行它们,而不挂起它们。仅在iOS中 允许在后台运行特定的应用程序类型:
- 在后台向用户播放音频内容的应用程序,如音乐播放器应用程序
- 在后台录制音频内容的应用程序
- 随时通知用户其位置的应用程序,如导航应用程序
- 支持互联网语音协议(VoIP)的应用程序
- 需要定期下载和处理新内容的应用程序
- 从外部附件接收定期更新的应用程序 实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架实现这些服务的相关方面 这些服务。声明服务可以让系统知道 您使用的服务,但在某些情况下是系统框架 实际上防止您的应用程序被挂起
嗨,普密特,谢谢你的回复。我已经把这个东西添加到info.Plist文件中了,正如你提到的,我的应用程序在后台工作正常,一切都很好。。我担心的是,我希望应用程序能够接收最长30分钟的更新,或者直到用户结束它。3分钟是不够的。解决方案可能是阻止应用程序进入后台吗?(如果可能的话)使用StopUpdateLocation方法完成更新后,您可以通过编程停止接收位置更新阻止应用程序进入后台,但如果您使用的是后台模式之一,只要您愿意,您就可以接收位置更新。如果您使用此后台模式,您将不会被限制在180秒之内。你可以在完成后立即停止。在某些情况下,如果有太多的应用程序正在运行,iOS可能会中止你的应用程序以释放一些内存,否则你的应用程序会一直运行,直到用户手动关闭。好的,我测试了它,正如你所说,我可以在后台接收位置更新。但是如果用户从不取消更新呢?该应用程序可能会不断耗尽电池电量,用户不知道为什么。。。
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self performSelector:@selector(stopGettingLocationUPdates) withObject:nil afterDelay:1800];
}
-(void)stopGettingLocationUPdates{
[self.locationManager stopUpdatingLocation]
}