处理 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

cookie的处理

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

python cookies 爬虫处理