我有一个最奇怪的问题,我不知道为什么会这样。我正在运行一个能够在应用程序处于后台时播放的鼓机。
这是我的精确计时器实现:
- (void)run
{
uint64_t interval = [self computeInterval];
mach_timebase_info_data_t info;
mach_timebase_info(&info);
uint64_t currentTime = mach_absolute_time();
currentTime *= info.numer;
currentTime /= info.denom;
uint64_t nextTime = currentTime;
dispatch_queue_t mainQueue = dispatch_get_main_queue();
while (_running) {
if (currentTime >= nextTime) {
dispatch_async(mainQueue, ^{
[_delegate accurateTimerDidTick:self];
});
interval = [self computeInterval];
nextTime += interval;
}
currentTime = mach_absolute_time();
currentTime *= info.numer;
currentTime /= info.denom;
}
}
我开始
- (void)start
{
self.running = YES;
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
}
当应用程序进入后台时,它可以完美运行,或者至少与应用程序处于活动状态时相同。即使屏幕被锁定,它也能正常工作,但是当屏幕关闭时,它开始窒息或变慢。因此,无论应用程序的状态如何,当屏幕关闭或打开时,唯一的性能差异是显而易见的。
任何想法为什么会发生这种情况将不胜感激!
非常感谢您提前。
更新 1: 令人难以置信的事情:我开始检查与 Audiobus 应用程序的集成,他们建议的第一个测试是在 Audiobus 也在运行的同时运行应用程序,以查看声音是否存在任何故障或延迟。猜猜看 - 它现在完美运行!屏幕开/关没有区别了。我不确定这是否真的很好,因为现在我更加困惑了。当然,当 Audiobus 应用程序未运行时,同样的问题会再次出现。