applicationDidEnterBackground和applicationWillResignActive的替代品?

我有一个应用程序,用[UIScreen mainScreen].brightness = newBrightness来改变屏幕亮度,当用户完成使用时,我想将亮度恢复到之前的状态。

我试过这两个委托方法:

  • - (void)applicationDidEnterBackground:(UIApplication *)application
  • - (void)applicationWillResignActive:(UIApplication *)application

但没有太大的成功。 我怀疑我的应用程序必须在前台来改变亮度? 在改变didEnterBackgroundMethod的亮度时,它根本没有效果。 当我使用willResignActive恢复亮度,如果我切换到另一个应用程序,但它没有任何效果时,我按主页button。

在应用程序离开前台之前是否有任何通知或委托方法被执行?

这似乎也发生在其他人身上:看到这个SOpost 。

只有解决这个问题似乎忘记了setBrightness ,并通过在视图上覆盖一个黑色半透明来模拟它。

老解答:

在应用程序进入后台状态之前按home键时,也应该调用willResignActive

这个方法被调用来让你的应用程序知道它即将从激活状态转移到非激活状态。 对于某些types的临时中断(例如来电或SMS消息)或用户退出应用程序并开始转换到后台状态时,可能会发生这种情况。 处于不活动状态的应用程序将继续运行,但不会将传入的事件分派给响应者。

这也是我所见证的行为。 所以,我的猜测(但它只是一个猜测)是你的应用程序没有设置为支持背景,所以当按下主页button它被终止。 在这种情况下, applicationDidEnterBackground不被调用。

我build议检查您的项目中的UIApplicationExitsOnSuspend或“select应用程序不能在后台运行”键中的info.plist文件。

此外,您可以尝试在这些函数中放置一些断点(或NSLog跟踪),并检查是否按预期有效地调用它们。

根据苹果的DevForum,这似乎是苹果公司很快就不想修复的一个漏洞。