当Mac OS X进入睡眠状态时,由于关闭笔记本电脑或从Apple菜单中选择“睡眠”,它如何挂起正在执行的进程?
我认为非窗口进程只是在任意执行点挂起。Cocoa应用程序也是这样吗?还是操作系统会等到控制返回到run循环调度器,并在“已知”位置进入睡眠状态?有没有现代操作系统可以做到这一点,或者无论它在做什么,它通常都足够安全,可以简单地挂起一个应用程序吗?
我很好奇,因为允许睡眠发生在任何时刻都意味着,从应用程序的角度来看,系统时钟可能会突然向前跳跃很多。这是我在编码时通常不会考虑的一种可能性。
我正在开发一个使用Service as Contdown的应用程序。当用户从活动开始倒计时,并且活动在按下睡眠按钮后进入后台时,我正在使用此服务继续倒计时。计数完成后,服务会显示带有铃声的通知。
我使用wait()“计算”服务中的时间。当我在实际设备上使用应用程序时,但在调试模式下,会出现奇怪的行为。当连接Eclipse调试器时,Service工作正常;当我在没有附加Eclipse调试器的设备上测试应用程序时,当倒计时结束时,Service不显示通知,除非按下休眠按钮并激活监视器-然后激活通知和铃声。
有人能解释是什么导致了这种奇怪的行为吗?也许问题是与唤醒锁或类似的构造有关?