我使用NSTimer每隔x秒播放一个音频文件。音频文件与持续运行的进程同步,因此NSTimer的间隔时间最短(据我所知):
self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(updateTimerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.updateTimer forMode:NSRunLoopCommonModes];
我的问题发生在转换到背景状态期间,例如当用户单击主页按钮时。似乎计时器发生延迟,并且" updateTimerFired:"在转换期间,方法不被可靠地调用。这导致音频文件播放不同步,尽管它们最终会在转换完成后同步备份。请注意,我的应用程序包含音频背景模式。
是否有比NSTimer更可靠的工具来确保在转换到后台时不会发生延迟?
答案 0 :(得分:1)
结束用"dataset": [
<cfoutput query="all_dates" group="Month_new">
{
"seriesname": "#all_dates.Month_new#",
"data": [
<cfoutput>
<cfif all_dates.CurrentRow GT 1>
<cfif previous_month EQ all_dates.Month_new and all_dates.CurrentRow LT all_dates.RecordCount>
, <br>
<cfelse>
<br>
</cfif>
</cfif>
{
"value": "#sum_total#"
}
<cfset previous_month = all_dates.Month_new>
</cfoutput>
]
}
<cfif all_dates.CurrentRow LT all_dates.RecordCount>,</cfif>
<br>
</cfoutput>
替换NSTimer:
dispatch_source_create
这为计时器提供了一个专用队列,并且不会因向后台的转换而中断。