ApplicationDidEnterBackground不会触发方法

时间:2013-05-03 21:17:09

标签: iphone ios cocoa-touch background-process multitasking

我正在尝试将后台任务应用到我的应用中。在我实现之前,我想给出一个简单的例子,如下所示。我只是放了一个柜台,想看看它是否重要。但是,它不会触发我称为进程的方法。我不知道我错过了什么。

- (void)applicationDidEnterBackground:(UIApplication *)application
{   
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
        if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
            UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance
            __block UIBackgroundTaskIdentifier background_task; //Create a task object
            background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
                [application endBackgroundTask: background_task]; //Tell the system that we are done with the tasks
                background_task = UIBackgroundTaskInvalid; //Set the task to be invalid
                //System will be shutting down the app at any point in time now
            }];
            //Background tasks require you to use asyncrous tasks
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                //Perform your tasks that your application requires
                NSLog(@"\n\nRunning in the background!\n\n");
                pollingTimer2 = [NSTimer scheduledTimerWithTimeInterval:0.1
                                                                target:self
                                                              selector:@selector(process)
                                                              userInfo:nil
                                                               repeats:YES];
                [application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform
                background_task = UIBackgroundTaskInvalid; //Invalidate the background_task
            });
        }
    }

}

-(void) process
{
    county= county+1;
    NSLog(@"%d,county",county);

}

1 个答案:

答案 0 :(得分:0)

使用以下代码:

if ([[UIDevice currentDevice] isMultitaskingSupported]) 
{ 
        //Check if device supports mulitasking
        UIBackgroundTaskIdentifier bgTask;
        UIApplication  *app = [UIApplication sharedApplication];
        bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
            [app endBackgroundTask:bgTask];
        }];
         pollingTimer2 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self  selector:@selector(process) userInfo:nil repeats:YES];
}

它的工作和测试。