私には最も奇妙な問題があり、なぜこれが起こっているのかわかりません。アプリがバックグラウンドで再生できるドラム マシンを実行しています。
これが私の正確なタイマーの実装です:
- (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 アプリが実行されていない場合も同じ問題が発生します。