如何处理 macOS 系统上 App Nap(App 小憩)的问题?
2021-09-09
问题描述
由于 macOS 系统上存在 App Nap(App 小憩)的机制,如果一些 App 窗口被置于后台一段时间不用、且窗口完全不可见,macOS 会置为 App 小憩状态。在此状态下,App 的 CPU 等系统资源的占用会受到限制,处于类似于“睡眠”的状态。

在这种情况下,有可能会出现 ZIM 长链接的心跳超时,导致连接断开的情况。
解决方案
开发者可以通过声明禁用 App Nap 的方式,来防止系统将应用进入小憩状态。
开发者如果需要禁用 App 小憩,只需要在 AppDelegate.m
文件里添加如下代码:
#include <Foundation/NSProcessInfo.h>
#include <Foundation/Foundation.h>
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
......
......
NSActivityOptions options = NSActivityUserInitiatedAllowingIdleSystemSleep;
NSString *reason = @"ZIM needs it's network connection. NO NAPPING!";
self.activity = [[NSProcessInfo processInfo] beginActivityWithOptions:options reason:reason];
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
......
......
[[NSProcessInfo processInfo] endActivity:self.activity];
self.activity = nil;
}