簡體   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