我有一个TVOS应用,我试图在Apple TV从睡眠模式恢复后更新用户界面。
我希望在进入睡眠模式时,应用程序会调用其中一个/或两个" applicationWillResignActive"和" applicationDidEnterBackground"。这样我就可以设置一个NSNotificaiton来监听" applicationDidBecomeActive"和/或" applicationWillEnterForeground"并相应地更新应用程序中的数据。
如果我通过按住主页按钮几秒钟打开应用程序打开睡眠状态,过程似乎是正确的。
applicationWillResignActive - 弹出窗口。
applicationDidBecomeActive。
按下睡眠按钮。
applicationWillResignActive调用。
applicationDidEnterBackground被调用。
我的应用程序现在处于后台,Apple TV处于睡眠模式(黑屏)。
按"菜单"遥控器上的按钮可唤醒Apple TV。
然后调用applicationWillEnterForeground。
applicationDidBecomeActive是被调用的。
我现在可以更新用户界面。
但是,如果您让应用程序自然进入睡眠模式,则不会遵循此顺序。我的Apple TV设置如下:
屏幕保护程序设置为在2分钟后在Apple TV上激活。
睡眠模式设置为在15分钟后变为活动状态。
2分钟后,将调用applicationWillResignActive。
屏幕保护程序现已激活。
经过15分钟后,应用程序开始从屏幕保护模式更改为睡眠模式。
此时调用applicationDidEnterBackground。
随着applicationWillEnterForeground快速调用,然后是applicationDidBecomeActive,应用程序会在短时间内再次激活。
然后调用applicationWillResignActive - 此时我希望applicationDidEnterBackground会触发,设备将进入睡眠模式(黑屏)。
然而情况并非如此。屏幕确实变黑,但再次触发applicationDidBecomeActive。
如此有效,应用程序仍处于活动状态,但设备处于睡眠模式。这是(正确的)默认行为吗?在醒来时,我无法刷新我的UI,因为当设备唤醒时没有被调用。没有app状态方法,也没有任何视图生命周期方法。
简而言之,我需要知道:
这是默认行为吗?
有解决方法吗?
我真的不想走坏NSTimer路线。顺便说一句,为了排除这个问题不是我的应用程序特有的,我设置了一个虚拟的" Hello World"应用程序并将应用程序状态方法记录到控制台。让设备自然进入睡眠模式时,会遵循完全相同的过程。虚拟应用程序在设备休眠之前调用applicationDidBecomeActive。