19

我正在编写一个接收 OSC 消息的应用程序。但是,由于 10.9 的 App-Nap 技术,应用程序在离开前台后停止对这些消息做出反应。我想为我在 10.9 上运行的应用程序禁用 AppNap,但仍然能够在 10.8 上运行,所以我尝试了这段代码,但它没有显示任何效果。

if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions:reason:)]) {
    [[NSProcessInfo processInfo] beginActivityWithOptions:0x00FFFFFF reason:@"receiving OSC messages"];
}

请参阅github上的完整代码。

if 条件似乎按预期工作,并在 10.9 机器上执行。但尽管如此,该应用程序仍被发送到睡眠状态。(活动监视器为我的应用程序显示“App Nap:是”)。

谢谢你的帮助!

4

2 回答 2

12

活动需要存储在属性中。所以我在头文件中添加了这个:

@property (strong) id activity;

然后使用这个实现。

if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions:reason:)]) {
    self.activity = [[NSProcessInfo processInfo] beginActivityWithOptions:0x00FFFFFF reason:@"receiving OSC messages"];
}

感谢所有贡献者!

于 2013-11-20T16:06:41.113 回答
5

根据您对问题的描述,您可能想查看 WWDC 2013 704并查看有关后台连续工作的部分(接近尾声)。查看 setpriority 命令的手册也可能会有所帮助。我不需要禁用应用程序小睡,但我认为手动更改进程优先级是一个好方法。

2013 WWDC 视频205(靠近中间)描述了应用程序小睡的一些有趣方面,这些方面可能会影响应用程序是否受到限制的结果。来自 WWDC 2013 的视频209展示了以下关于 Occlusion(应用程序小睡的点)可能有用的屏幕截图。

应用遮挡

窗口遮挡

遮挡示例 希望这可以帮助。

于 2013-11-13T15:15:29.497 回答