Отключить приложение Nap в приложении MacOS 10.9 (Mavericks)
Я пишу приложение, которое получает сообщения OSC. Однако из-за 10,9 приложений-Nap-технологий приложение перестает реагировать на эти сообщения после выхода на передний план.
Я хочу отключить AppNap для моего приложения, работающего на 10.9, но все же иметь возможность запускать на 10.8, поэтому я попробовал эту часть кода, но это не проявляет никакого эффекта.
if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions:reason:)]) {
[[NSProcessInfo processInfo] beginActivityWithOptions:0x00FFFFFF reason:@"receiving OSC messages"];
}
Смотрите полный код github.
Условие if работает как ожидалось и выполняется на 10.9 машинах. Но тем не менее приложение отправляется спать. (Activity Monitoring показывает "App Nap: Yes" для моего приложения).
Спасибо за вашу помощь!
Ответы
Ответ 1
активность должна храниться в свойстве. Поэтому я добавил это в header файл:
@property (strong) id activity;
а затем использовал эту реализацию.
if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions:reason:)]) {
self.activity = [[NSProcessInfo processInfo] beginActivityWithOptions:0x00FFFFFF reason:@"receiving OSC messages"];
}
Спасибо всем участникам!
Ответ 2
Из вашего описания проблемы кажется, что вы можете взглянуть на WWDC 2013 704 и просмотреть раздел ( ближе к концу) на фоне непрерывной работы. Также может оказаться полезным руководство по команде setpriority. У меня не было необходимости отключать приложение, но я считаю, что ручное изменение приоритета процесса является хорошим подходом.
2013 WWDC Video 205 (около середины) описывает некоторые интересные аспекты приложения, которые могут повлиять на результат приложения дросселируется. Видео 209 из WWDC 2013 содержит следующие скриншоты по окклюзии (точка, в которой приложение заходит) может быть полезна.
![App Occlusion]()
![Window Occlusion]()
Надеюсь, это поможет.