iOS:打开通知中心后为何立即触发applicationDidBecomeActive?
iOS控制中心与通知中心触发应用生命周期差异的原因
我刚接触iOS开发的时候也碰到过一模一样的困惑,后来翻了苹果的官方文档加上反复测试,终于搞明白这是系统针对两个控件的交互定位不同,才导致了生命周期方法调用的差异:
场景1:打开控制中心仅触发applicationWillResignActive
控制中心的设计定位是「临时快速操作面板」——系统认为用户调出它只是为了完成一些极短的操作(比如调节亮度、打开蓝牙),很快就会回到原应用。所以系统只会让应用进入「非活跃状态」:
- 调用
applicationWillResignActive,提示应用暂停实时交互(比如停止动画、暂停视频播放) - 但不会让应用进入后台(也就不会触发
applicationDidEnterBackground) - 只要控制中心保持打开状态,应用就会一直停留在非活跃状态,自然不会调用
applicationDidBecomeActive
场景2:打开通知中心先触发applicationWillResignActive,立刻调用applicationDidBecomeActive
通知中心的定位更偏向「信息查看面板」:系统设计它的时候,允许用户在查看通知的同时,应用的后台逻辑可以继续运行(比如音乐播放不会中断)。所以当通知中心完全展开后,系统会快速将应用切回活跃状态:
- 下滑开始时,系统认为焦点暂时转移,先调用
applicationWillResignActive - 通知中心完全显示后,系统判定应用依然是用户的主要交互目标,立刻调用
applicationDidBecomeActive让应用恢复活跃状态
简单来说,这是iOS系统层面的规则,不是你的代码有问题,属于应用生命周期里的特殊场景,记住两个控件的定位差异就能理解啦~
内容的提问来源于stack exchange,提问作者Mikhail Churbanov
相关产品推荐
相关产品推荐

