gpt4 book ai didi

objective-c - 在 applicationState != UIApplicationStateBackground 测试通过后收到 UIApplicationWillEnterForegroundNotification

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:20 26 4
gpt4 key购买 nike

我正在编写一个使用 GCD 定时器源的 Objective-C 包装器。目标之一是让包装器在应用程序进入后台时管理暂停计时器源。

docs对于 -[UIApplicationDelegate applicationDidEnterBackground:] 表示它应该用于使计时器无效等;我对此的解释有点松散(也许这是我问题的根源?),因为我正在暂停 GCD 计时器(dispatch_suspend())以响应 UIApplicationDidEnterBackgroundNotification ).

当包装器的实例被初始化时,它会检查 [UIApplication sharedApplication].applicationState != UIApplicationStateBackground 以确定 GCD 计时器源是否应该作为初始化序列的一部分最初恢复。它还注册了 UIApplicationDidEnterBackgroundNotificationUIApplicationWillEnterForegroundNotification,用于挂起和恢复计时器源(分别)。

我观察到的问题是,似乎有这样的情况,即在初始化期间通过了 [UIApplication sharedApplication].applicationState != UIApplicationStateBackground 的检查,以便恢复计时器源,收到的下一个通知是 UIApplicationWillEnterForegroundNotification,它会导致计时器源第二次恢复。这会导致崩溃,因为在第二次恢复时计时器没有暂停。

我可以通过在本地跟踪应用程序状态并确认会重复的转换来解决这个问题,但我担心我可能做错了什么或者可能存在错误(在实现中或在文档中).

最佳答案

应用状态是这样工作的:

在初始启动时,

  1. 应用程序:didFinishLaunchingWithOptions
  2. applicationDidBecomeActive

当你按下主页按钮时,

  1. applicationWillResignActive
  2. applicationDidEnterBackground

当您打开后台应用时,

  1. applicationWillEnterForeground
  2. applicationDidBecomeActive

打开 -(初始启动和打开后台应用程序)- applicationDidBecomeActive 被调用 - 在此处初始化计时器。

隐藏或接听电话等 - applicationWillResignActive 被调用 - 在此处停止计时器。

希望这对您有所帮助。

关于objective-c - 在 applicationState != UIApplicationStateBackground 测试通过后收到 UIApplicationWillEnterForegroundNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com