我的应用在后台运行,并使用NSTimer在一段时间后启动音频。我和我的测试人员对此没有任何问题,音频可以在后台几小时后启动事件(> 10h)。
我的问题是有些用户报告音频经常被延迟,有时会延迟几分钟,有时会延迟一小时。
我这样做:
UIApplication * app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:nil];
dispatch_async(dispatch_get_main_queue(), ^{
theTimer = [NSTimer scheduledTimerWithTimeInterval:[theDateIWant timeIntervalSinceNow] target:self selector:@selector(playAudio) userInfo:nil repeats:NO];
});
我的问题是:
- 系统可以延迟NSTimer吗?如果是这样如何解决这个问题? - 如何重现这类问题? - 使用以下内容更安全吗?
theTimer = [[NSTimer alloc] initWithFireDate:theDateIWant interval:0.0 target:self selector:@selector(playAudio) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:theTimer
forMode:NSDefaultRunLoopMode];
感谢您的帮助!
答案 0 :(得分:1)
在我看来,你理解背景任务有点不对劲。
执行第一个代码段时(我假设您将其放在applicationDidEnterBackground
方法中),它表示系统
我有一个小任务要执行,请等一会儿直到我完成 它!
并且系统将等待大约5-10分钟,然后暂停应用程序。
如果您需要报警,可以使用LocalNotification在指定时间播放特定声音。