为啥我的 UIApplicationDelegate 在下拉通知中心时收到 applicationDidBecomeActive?
Posted
技术标签:
【中文标题】为啥我的 UIApplicationDelegate 在下拉通知中心时收到 applicationDidBecomeActive?【英文标题】:Why does my UIApplicationDelegate receive applicationDidBecomeActive when pulling down notification center?为什么我的 UIApplicationDelegate 在下拉通知中心时收到 applicationDidBecomeActive? 【发布时间】:2018-01-03 10:32:22 【问题描述】:我在 XCode 中构建了一个没有任何功能的裸应用程序,并将日志记录语句放在 applicationDidBecomeActive 和 applicationWillResignActive 方法中。
当我向下滑动以显示通知中心时,我看到以下内容:
2018-01-03 10:18:16.867028+0000 BareProject[1165:2053601] 主动辞职
2018-01-03 10:18:17.510713+0000 BareProject[1165:2053601] 活动
2018-01-03 10:18:17.634805+0000 BareProject[1165:2053601] 主动辞职
这是故意的吗?我的代码在激活时做了很多工作,只是在大约 120 毫秒后再次将地毯从其中拉出,似乎文档说我应该使用 applicationDidBecomeActive 来重新启动任务: https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622956-applicationdidbecomeactive?language=objc
我在 ios 10.3 上试过这个,这个行为不存在。
【问题讨论】:
这种行为在 iOS 12 中仍然存在。这太可怕了。 有趣的是,当 iPhone 自己锁定时,这个问题也存在。首先applicationDidBecomeActive
然后立即applicationWillResignActive
对我上面的评论:当通知中心已经完全覆盖屏幕时会发生这种情况。这是一个巨大的错误 IMO。
iOS15还是有这个问题
【参考方案1】:
实际上有两个问题,对applicationDidBecomeActive:
的意外调用和对applicationWillResignActive:
的重复调用。
“下拉”显示在iOS 9上正常工作的通知中心。之前系统只调用了applicationWillResignActive:
,刚刚用iOS 9模拟器验证过。
在 iOS 11.2.6 上,applicationDidBecomeActive:
会按照您的描述被调用,这似乎是一个 Apple 错误。在这种特殊情况下,系统行为与文档冲突。这是另一个文档偏离您观察到的行为的示例https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforHandlingAppStateTransitions/StrategiesforHandlingAppStateTransitions.html#//apple_ref/doc/uid/TP40007072-CH8-SW10
当您的应用移回活动状态时,其 applicationDidBecomeActive:方法应该反转任何步骤 在 applicationWillResignActive: 方法中获取。
【讨论】:
【参考方案2】:看起来这是一个错误,使其成为常规行为
你需要寻找applicationDidEnterBackground
但是,如果您需要为此处理代码
当通知中心向下滑动时,您可以使用以下命令在 applicationDidBecomeActive
中不运行代码
class AppDelegate: UIResponder, UIApplicationDelegate
var didEnterBackground = true
func applicationDidBecomeActive(_ application: UIApplication)
if !didEnterBackground
return
didEnterBackground = false
// run your code
func applicationDidEnterBackground(_ application: UIApplication)
didEnterBackground = true
【讨论】:
以上是关于为啥我的 UIApplicationDelegate 在下拉通知中心时收到 applicationDidBecomeActive?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 AppDelegate 添加到独立的 watchOS SwiftUI 应用程序中?
为啥我的 Chrome Profiler 没有为我的对象显示正确的保留路径,为啥我的对象从未被释放?
为啥我的程序需要两行输入,为啥我的 GPA 计算错误 c#?