产品 / 解决方案
平台 / 框架

如何处理 macOS 系统上 App Nap(App 小憩)的问题?

产品 / 插件:即时通讯

平台 / 框架:macOS

更新时间:2021-09-09 19:57


问题描述

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

/Pics/ZIM/macOS/macOS_App_Nap.jpg

在这种情况下,有可能会出现 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;
}
本篇目录
下载 PDF