performFetchWithCompletionHandler没有在固定的时间间隔内被调用

时间:2014-08-06 13:03:03

标签: objective-c iphone ios7 background

我正在尝试使用ios7的后台提取功能调用performFecthWithCompletionHandler。 为此,我设置了180秒的时间间隔。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    NSLog(@"Did finish launching");
    NSTimeInterval timeInterval = 180;
    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:timeInterval];
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    return YES;
}

我已经经历了许多线程,它建议使用Xcode - >调试 - >模拟后台提取。哪个工作正常。

但是我希望应用程序在timeInterval结束后自动调用此方法。 我已尝试在不连接Xcode的情况下运行应用程序。 但它在180秒后没有调用。它需要更多的时间来调用它。

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  NSLog(@"########### Received Backgroudn Fetch ###########");

    //Increase Badge Number
    [UIApplication sharedApplication].applicationIconBadgeNumber++;

    UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController;
    NSLog(@"fetch");
    id topViewController = navigationController.topViewController;
    if ([topViewController isKindOfClass:[ViewController class]]) {
        [(ViewController*)topViewController insertNewObjectForFetchWithCompletionHandler:completionHandler];
    } else {
        NSLog(@"Not the right class %@.", [topViewController class]);
        completionHandler(UIBackgroundFetchResultFailed);
    }
}

我在这里缺少什么?或者是什么让它不被称为

1 个答案:

答案 0 :(得分:3)

当操作系统允许您的应用程序“唤醒”时,您无法控制。在后台并执行后台获取。操作系统根据许多不同因素决定应该允许您的应用程序执行提取的频率。我发现不同设备之间的这种情况会有所不同,有时会占用相同的应用小时数,具体取决于应用程序在设备上的使用时间,已完成的背景提取次数以及完成它们的速度/效率等等。

当您设置最小背景提取时间间隔时,这并不告诉操作系统执行提取的频率,它告诉操作系统它 不应该 执行背景提取比这更频繁。最小后台获取时间间隔:

  

指定必须经过的最短时间   后台获取操作。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/setMinimumBackgroundFetchInterval

我强烈建议您阅读文档以及与iOS7多任务相关的任何内容,以便更好地了解其工作原理。