处理 UIBackgroundTask Expiration 正在停止我的 beaconRanging 方法
Posted
技术标签:
【中文标题】处理 UIBackgroundTask Expiration 正在停止我的 beaconRanging 方法【英文标题】:Handling UIBackgroundTask Expiration is stopping my beaconRanging Method 【发布时间】:2014-06-25 09:13:33 【问题描述】:我开发了一个应用程序,它使用 ibeacon API 在后台为信标设置范围。由于它使用核心位置和蓝牙,所以我从功能中启用了位置、蓝牙配置。因此,在运行我的应用程序之后,范围发生在后台,但是在我的应用程序终止之间的 5-10 分钟后,当我启动应用程序时,它再次显示启动画面和登录页面,所以在谷歌之后我了解到应用程序在后台运行一些额外的时间。
为了克服应用程序终止,我在方法中使用以下代码并在 applicationDidEnterBackground 中调用该方法。
-(void)startBackgroundTask
if(bgTask != UIBackgroundTaskInvalid)
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^
[self endBackgroundUpdateTask];
NSLog(@"your time is over");
//you can call start once again to get more time
];
-(void) endBackgroundUpdateTask
[[UIApplication sharedApplication] endBackgroundTask: bgTask];
bgTask= UIBackgroundTaskInvalid;
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TimerOutStartMonitering" object:nil];
使用上述代码并调试后,一旦 UIBackgroundTaskInvalid.我怎样才能完成这两项任务 1)我的应用程序不应该在后台时间结束后终止。 2)我的信标测距不应该停止。
有可能吗? 请帮帮我。
【问题讨论】:
【参考方案1】:很遗憾,这是不可能的。您不能无限期地运行这样的后台任务。此机制仅适用于终止前的短期应用清理。见here。
运行后台任务的应用程序的运行时间是有限的。 (您可以使用 backgroundTimeRemaining 属性找出可用的时间。)
因此,iBeacon 的测距限制在后台几秒钟内。您可以使用 IBeacon 监控来重新启动您的应用程序并在信标发现时再次进行测距,但同样,除非用户将应用程序带到前台,否则您只会获得一小段测距时间。
【讨论】:
以上是关于处理 UIBackgroundTask Expiration 正在停止我的 beaconRanging 方法的主要内容,如果未能解决你的问题,请参考以下文章
作为 UIBackgroundTask 运行时,后台线程上的核心数据迁移失败
解决selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expir
JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expir
MySQL5.7出现Your password has expired. To log in you must change it using a client that supports expir