0

大家好,当应用程序在后台时,我需要调用一个方法。现在我正在尝试实现这一目标,但从未调用过计时器。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.
        self.timer = nil;
        [self initTimer];

    });
}

- (void)initTimer {

    DebugLog(@"timer INIT!!!!!");

    if (self.timer == nil) {
        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.3
                                                      target:self
                                                    selector:@selector(checkUpdates:)
                                                    userInfo:nil
                                                     repeats:YES];
    }
}

- (void)checkUpdates:(NSTimer *)timer{
    [UIApplication sharedApplication].applicationIconBadgeNumber++;

    DebugLog(@"timer FIRED!!!!!");
    [self initTimer];
}

当应用程序处于后台时,我需要checkUpdates每隔 N 分钟或秒调用一次该方法。请注意,initTimer当应用程序进入后台时调用该方法,但从不调用计时器。

4

1 回答 1

-1

如果您想在后台使用应用程序,Apple 将不允许在后台使用应用程序,您必须使用“UIBackgroundModes”。

然后从 Appdeligate 你可以管理这个线程

你应该检查

http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html

希望对你有帮助

于 2013-05-23T09:19:51.810 回答