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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 六码:234789;五码:23489;胆码:249;百位:039;十位:2478;个位:248;仅供参考!
    l宁静致远r阅读 152评论 0 2
  • [在吗?] [嗯,怎么了?] [没事不能找你吗?] [可以] [陪我玩吧,我很无聊] [嗯] 新消息提醒 [小苏,...
    小爷的人你抢不走阅读 270评论 0 0