检测用户何时空闲了 X 时间,然后检测用户何时立即活跃的最佳方法是什么?
我知道有 NSWorkspace 提供 will/did sleep /唤醒通知,但我不能依赖它,因为 sleep 设置通常约为 15 分钟到从不。我需要能够检测用户是否闲置了约 1-2 分钟。
这answer提供了一种获取空闲时间的方法。如果可能,我想避免轮询。
最佳答案
据我所知,轮询是您唯一的选择。正如 user1118321 指出的那样,每隔 O(分钟)轮询一次不太可能导致任何问题、性能或其他问题。
如果您的应用程序有一个 GUI 并且无论如何都会接收 UI 事件,您可以通过 +[NSEvent addLocalMonitorForEventsMatchingMask:handler:]
安装一个处理程序,它会在每个事件上重置您的计时器。当用户始终处于活跃状态时,至少在您自己的应用中,这将有助于减少甚至消除民意调查。
一旦您确定用户已经闲置了足够长的时间,您就可以安装一个全局事件点击来监视下一个事件。参见示例 -[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
。
注意:你应该使用CGEventSourceSecondsSinceLastEventType
如果可能的话,而不是戳入 IO 注册表。它是一个正式的、受支持的 API,并且可能更高效。更不用说它更简单了。还有 UKIdleTimer尽管它依赖于 Carbon,因此可能不适用。
关于objective-c - 用户在 OS X 上闲置后的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426428/