繁体   English   中英

NSOperationQueue Heisenbug?

[英]NSOperationQueue Heisenbug?

我正在开发一个应用程序,该应用程序通过用performSelectorInBackground启动的单独线程中的循环从循环调用AudioServicesPlayAlertSound(kSystemSoundID_Vibrate) 由于某些原因,仅当整个应用程序在后台运行时,该应用程序才能可靠地振动。 我尝试从发送到主NSOperationQueue的块中调用vibrate函数,但仅在后台时它仍然保持一致。 当然,除非我将NSLog()调用扔到操作块中:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    NSLog(@"VIBRATING");
    AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
}];

通过NSLog调用,无论在何处运行,它都能按预期运行。

知道为什么会这样吗? 所有建议都非常感谢

AudioServicesPlayAlertSound状态的头文件文档

播放具有AlertSound行为的提供的SystemSoundID。

我可以想象,当该应用程序被认为处于活动状态且位于最前端时,它根本无法播放。 也许尝试改为使用AudioServicesPlaySystemSound

使iPhone振动的一个答案解决了我的问题。 由于某些原因,iPhone在录制音频时不喜欢振动。 因此,显而易见的解决方案是在振动之前停止记录:

[_recorder stop];
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
[_recorder record];

仍然,我不确定为什么NSLog会产生任何效果,并且我仍然不知道为什么在后台运行时,如果没有上述修复,它仍然可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM