0

在我的应用程序中,我有一个函数 updatetimer 可以连续更新计时器。我希望这个过程在应用程序处于后台时保持继续。但是只有当应用程序处于前台时才会调用该方法。当应用程序处于后台时它不会被调用。下面是那个的代码。我该如何解决这个问题?

   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 


                         timer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
                        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

                        [[NSRunLoop currentRunLoop] run]; 
                    }); 
4

1 回答 1

3

从苹果文档中,只有这些任务被允许在后台运行,并且它们都有自己的限制:

音频——应用程序在后台向用户播放可听内容。(此内容包括使用 AirPlay 的流式音频或视频内容。)

位置——应用程序让用户随时了解他们的位置,即使它在后台运行时也是如此。

voip——该应用程序使用户能够使用 Internet 连接拨打电话。

newsstand-content - 该应用程序是一个 Newsstand 应用程序,可在后台下载和处理杂志或报纸内容。

external-accessory - 该应用程序与需要通过外部附件框架定期提供更新的硬件附件配合使用。

bluetooth-central — 该应用程序与需要通过 CoreBluetooth 框架定期提供更新的蓝牙配件配合使用。

否则,您最多可以要求 10 分钟。额外的运行时间:(也来自苹果文档)

bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
        // Clean up any unfinished task business by marking where you.
        // stopped or ending the task outright.
        [application 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, preferably in chunks.
 
        [application endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });

更多信息: 苹果文档

于 2012-07-10T06:22:10.360 回答