如何在iOS 8的后台状态下持续执行任务

3

我编写了以下代码,在应用程序处于后台状态时执行任务,它在iOS 7中运行良好,但在iOS 8中无法正常工作。有人能给我解决方案,使应用程序在后台状态下持续执行任务。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
   UIApplication *app = [UIApplication sharedApplication];
   UIBackgroundTaskIdentifier bgTask;
   bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
   }];
}

尝试使用NSTimer。它将在后台运行10分钟..! - Vidhyanand
我已经为你点赞了,希望你也能在我的回答中点赞。 - Nischal Hada
2个回答

4

除了少数情况外,没有办法在后台连续执行任务。

大多数应用程序可以轻松地转移到扩展状态,但也有合法的理由让应用程序继续在后台运行。iOS 提供的技术分为三类:

  1. 在前台启动短期任务的应用程序可以请求在应用程序进入后台时完成该任务所需的时间。
  2. 在前台启动下载的应用程序可以将这些下载的管理权移交给系统,从而允许应用程序在下载继续进行时被挂起或终止。
  3. 需要在后台运行以支持特定类型任务的应用程序可以声明其支持一个或多个后台执行模式。

对于需要更长时间来实现的任务,您必须请求特定权限以使它们在后台运行而不被挂起。在 iOS 中,只有特定类型的应用程序被允许在后台运行:

  1. 在后台向用户播放声音内容的应用程序,例如音乐播放器应用程序
  2. 在后台记录音频内容的应用程序
  3. 随时通知用户其位置的应用程序,例如导航应用程序
  4. 支持互联网语音协议(VoIP)的应用程序
  5. 需要定期下载和处理新内容的应用程序
  6. 从外部附件接收定期更新的应用程序

实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架来实现这些服务的相关方面。声明服务让系统知道您使用哪些服务,但在某些情况下,实际上是系统框架防止您的应用程序被挂起。


在我的情况下,我需要每20秒向服务器发送我的位置。这可行吗? - user3825276
1
是的,这是通过NSURLSession "后台上传"实现的。此外,您需要为应用程序启用“后台位置更新”。请参阅此教程(您需要使用NSURL会话和后台位置更新的组合):http://www.raywenderlich.com/51127/nsurlsession-tutorial - gagarwal

0

是的,我已经在实现 iBeacon 时实现了背景条件。代理被设置在接口中。

@interface HomeMainVC ()<ESTBeaconManagerDelegate>{

我能够通过以下函数发送本地通知,如果用户进入或退出信标区域,则可以发送本地通知。因此,一定有一些方法可以发送用户位置。

//Beacon manager did enter region
- (void)beaconManager:(ESTBeaconManager *)manager didEnterRegion:(ESTBeaconRegion *)region
{}

//Beacon Manager did exit the region
- (void)beaconManager:(ESTBeaconManager *)manager didExitRegion:(ESTBeaconRegion *)region
{}

您使用了以下代码,但仅当应用程序被发送到后台模式时才会调用一次,因此它对您没有用处。如果您想在进入后台模式时仅执行一次某些操作,则此代码对您有用。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
   UIApplication *app = [UIApplication sharedApplication];
   UIBackgroundTaskIdentifier bgTask;
   bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
   }];
}

请简要解释一下这个。 - user3825276
简要介绍一下什么是信标或者-(void)applicationDidEnterBackground:(UIApplication *)application{}。 - Nischal Hada
简要介绍Beacon是什么。 - user3825276
我已经实现了iBeacon技术,可以在前台和后台模式下检测用户进入特定位置。当应用程序在前台运行时,通过弹出应用程序中所需的信息来通知用户。当应用程序在后台运行时,通过本地通知来通知用户所需的信息。如果您想详细了解iBeacon技术,可以访问http://estimote.com/。 - Nischal Hada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接