如何在iOS 8中应用程序处于后台状态时连续执行任务

时间:2015-03-24 04:00:15

标签: ios objective-c ios7 ios8 background-process

当应用程序处于后台状态时,我编写以下代码来执行任务,它在iOS 7中正常工作但在iOS 8中无效。 当应用程序处于后台状态时,有人可以给我解决方案在iOS 8中连续执行任务。

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

2 个答案:

答案 0 :(得分:3)

无法在后台连续执行任务(少数情况除外)。

  

大多数应用都可以轻松地移动到扩展状态,但有   应用程序继续运行的正当理由也是   背景。 iOS提供的技术分为三种   类:

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

    对于需要执行更多执行时间的任务,您必须这样做   请求特定权限,以便在后台运行它们   他们被停职了。在iOS中,只允许使用特定的应用类型   在后台运行:

         
        
    1. 在后台播放用户可听内容的应用,   例如音乐播放器应用
    2.   
    3. 在内容中录制音频内容的应用   背景
    4.   
    5. 让用户了解其所在位置的应用   时间,例如导航应用程序
    6.   
    7. 支持互联网语音的应用   协议(VoIP)
    8.   
    9. 需要下载和处理新内容的应用   经常
    10.   
    11. 从外部附件接收定期更新的应用
    12.         

      实施这些服务的应用必须声明他们的服务   支持和使用系统框架来实现相关方面   那些服务。声明服务可以让系统知道哪个   您使用的服务,但在某些情况下,它是系统框架   实际上会阻止您的申请被暂停。

答案 1 :(得分: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];
   }];
}