[英]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.