如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?

How can I query to find out if my MacOS/X app is in app-nap mode?

本文关键字:应用程序 是否 模式 MacOS 查询 何查询 我的      更新时间:2023-10-16

我有一个在MacOS(10.10及更高版本(上运行的C++应用程序(基于Qt(,我希望它在MacOS的应用程序午睡模式下运行时稍微修改其行为。 (特别是,它执行一些定期网络查询以更新其 GUI 中的状态指示器,但如果应用程序正在打盹,我希望它停止执行这些查询,直到它从午睡中醒来(。

如果我有这样的功能:

bool IsThisProcessNapping();  // returns true iff we're in app-nap mode

。我想我可以实现我想要的行为,但我不知道任何这样的功能。 它以其他名称存在吗?

(请注意,我不想只是禁用app-nap,因为如果可能的话,我希望我的程序是节能的(

我不确定你的问题是否有具体的答案(我认为你谈论的 API 实际上不存在(。

您可以从阅读Mac应用程序的能源效率指南开始,尤其是"增强应用程序小睡"部分:

默认情况下,如果您的应用未处于活动状态,则它有资格使用 App Nap。 与用户互动,但尚未更新某些用户的可见窗口 时间长度。但是,你的应用最了解重要性 的活动,并且不应依赖 App Nap 将其置于空闲状态 州。增强 App Nap 的最有效方法是让您的应用: 侦听它不再处于活动状态的通知,并 尽快暂停能源密集型工作

鉴于您描述的方案(暂停网络请求以更新状态指示器(,请查看在可见性更改时通知应用。

它有应用程序委托方法的示例applicationDidChangeOcclusionState:windowDidChangeOcclusionState:。当应用或相关窗口被遮挡时,您可以暂停网络活动,并在遮挡状态恢复为可见时恢复活动。

上面提到的指南还链接到用于检查应用活动状态的类似文档。

如果你的应用不可见且未处于活动状态,则它是 App Nap 的候选项。在这一点上,如果应用程序实际上还在打盹,这对您有什么区别?如果您的目标是节能,请在应用程序不可见后暂停您的网络活动 - 因为无论如何没有人可以看到您的状态指示器!