当我的iOS 4应用程序在后台时,如何重复调用方法?

时间:2010-12-16 16:19:34

标签: loops audio ios4 background multitasking

我正在为iOS 4编写一个应用程序,它需要在后台以常规(用户指定的)间隔播放声音(或振动)。我不想使用本地通知,因为不需要显示可点击的警报。

当我的应用切换到后台时,会触发此代码(来自Apple的文档):

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.
    NSLog(@"I am now in the background");

    // Here I need something like this:
    [self performSelector:@selector(myMethod) withObject:nil afterDelay:5.0];

    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
});

当应用切换到后台时会执行[self performSelector: ...]行,但在应用切换回前景之前不会调用myMethod方法(不是在5秒内,如设置为afterDelay:参数)。那么,如何在应用程序仍处于后台时调用该方法?

1 个答案:

答案 0 :(得分:0)

没关系!安排本地通知可以做我需要的。

最好使用本地通知和UIApplication cancelAllLocalNotifications来清除用户未解雇的现有通知。完善!此外,如果弹出消息让用户知道声音(或振动)是什么,则用户可以获得额外的好处。