App Nap

在IOS上,为了节能,在程序进入后台后会被杀掉,在OS X上也有类似的机制,称为App Nap。提供了3个API以便你来使用。
第一个用来检测你的程序处于何种状态,这个方法会在应用程序的可见性发生改变时被调用。写在AppDelegate里。

func applicationDidChangeOcclusionState(notification: NSNotification) {
    if NSApp.occlusionState.rawValue == 8194 {
        print("foreground")
    } else {
        print("background")
    }
}

第二个用来设置计时器容忍度,这个还不太明白。。。貌似是说在各个应用内正在运行的计时器之间会有偏差,如果系统实时的矫正它们就会使CPU不停的处于繁忙的状态。设置计时器容忍度可以在差值达到一定程度后再进行矫正。苹果建议的值是10%。在启动计时器前设置下setTolerance就可以了。
第三个用来告诉系统你正在做的事是否重要,系统通过这个来判断是否可以进入小睡状态。

let queue = NSOperationQueue.mainQueue()
var token = NSProcessInfo.processInfo()
token.beginActivityWithOptions(NSActivityOptions.UserInitiated, reason: "can't be interapt")
queue.addOperationWithBlock { () -> Void in
    //做一些重要的事,在做这些事时App不会进入nap模式
}
NSProcessInfo.processInfo().endActivity(token)
        
token = NSProcessInfo.processInfo()
token.beginActivityWithOptions(NSActivityOptions.Background, reason: "not important")
queue.addOperationWithBlock { () -> Void in
    //这里做的事在app不可见时很可能被打断
}
NSProcessInfo.processInfo().endActivity(token)

你可能感兴趣的:(App Nap)