我有一个在MacOS(10.10及更高版本)上运行的C ++应用程序(基于Qt),并且我希望它在MacOS的app-nap mode下运行时对其行为进行一些修改。 (特别是,它会进行一些定期的网络查询以更新其GUI中的状态指示器,但是如果应用程序正在小睡,我希望它在从午睡中醒来之前停止执行这些操作)。>
如果我有这样的功能:
bool IsThisProcessNapping(); // returns true iff we're in app-nap mode
...我想我可以实现我想要的行为,但是我不知道任何这样的功能。它以其他名称存在吗?
(请注意,我不想只禁用应用程序小睡,因为我希望程序尽可能节能)
答案 0 :(得分:1)
我不确定您的问题是否有特定答案(我认为您所说的API实际上并不存在)。
您可以先阅读Energy Efficiency Guide for Mac Apps,尤其是“增强应用程序小睡”部分:
默认情况下,如果您的应用未处于活跃状态,则可以使用该应用 与用户互动,并且尚未更新一些可见窗口 时间长短。但是,您的应用最了解重要性 活动,并且不应该依赖App Nap使其处于闲置状态 州。增强App Nap的最有效方法是让您的应用 监听不再使用的通知,以及 尽快暂停耗能的工作
鉴于您所描述的情况(暂停网络请求以更新状态指示器),请检出Notify Your App When Visibility Changes。
它具有应用程序委托方法applicationDidChangeOcclusionState:
和windowDidChangeOcclusionState:
的示例。当您的应用程序或相关窗口被遮挡时,您可以暂停网络活动,并在遮挡状态恢复到可见状态时恢复网络活动。
上述指南还链接到类似的文档,用于检查您应用的活动状态。
如果您的应用程序不可见且未激活,则可以选择应用程序小睡。到那时,如果应用程序实际上正在小睡,对您的情况有什么影响?如果您的目标是提高能源效率,请在该应用程序不可见时暂停您的网络活动-因为仍然没有人可以看到您的状态指示器!