【问题标题】:Confusion about applicationDidBecomeActive and applicationWillEnterForeground关于 applicationDidBecomeActive 和 applicationWillEnterForeground 的混淆
【发布时间】:2015-02-09 02:11:03
【问题描述】:

我对上述两种应用程序委托方法有些困惑:我读过这个link,它表明 applicationWillEnterForeground 将在 applicationDIdBecomeActive 被调用之前被调用。我不确定之前的方法。

如果我有一个社交应用程序:在我的 applicationWillEnterForeground 函数中,我将检查是否存在当前用户会话;在我的应用程序DIIdBecomeActive 中,我将重新加载timelineViewController 上的内容:因此,如果没有当前用户会话,则无法显示时间线。假设用户在没有当前用户会话的情况下从后台进入应用程序,applicationWillEnterForeground 将显示一个登录页面以指示没有用户,但是,下一个调用的 applicationDIdBecomeActive 会返回到不应该显示的时间线吗?

如果我不想修改其他视图控制器中的代码,或者在 applicationDIdBecomeActive 中检查用户会话。我可以在 applicationWillEnterForeground 函数中添加任何代码来防止 applicationDIdBecomeActive 函数运行吗?

另一个问题:我注意到对于像 Facebook 这样的应用程序,如果我按下主页按钮,将其转为背景,但立即将其转回屏幕,该应用程序不会显示很多变化;但是,如果我让它在后台停留一个小时,当我把它转回前台时,它会“冻结”一段时间(看起来很清爽)。委托方法如何设计来实现这一点?系统是否根据应用在后台停留的时间来决定调用哪个委托方法(以上两种)?

顺便说一句,我使用 swift 作为 iOS 的主要编程语言

【问题讨论】:

    标签: ios swift viewcontroller


    【解决方案1】:

    您无法阻止applicationDidBecomeActive 被调用。

    您可以在applicationWillEnterForeground 中设置一个实例变量,稍后读取该变量以确定您的应用程序使用的流程。

    【讨论】:

    • 另一个问题:我注意到对于像 Facebook 这样的应用程序,如果我按下主页按钮,将其转为背景,但立即将其转回屏幕,该应用程序不会显示很多变化;但是,如果我让它在背景中停留一个小时,当我将其转回前景时,它会“冻结”一段时间(看起来很清爽)。委托方法如何设计来实现这一点?系统是否根据应用在后台停留的时间来决定调用哪个委托方法?
    【解决方案2】:

    要在 Facebook 等特定时间间隔后刷新或启动 VC 您的应用,您可以执行以下操作:

    在 applicationDidEnterBackground 中

    let app = UserDefaults.standard
        let date = Date()
        app.set(date, forKey: "activeDate")
    

    在应用程序WillEnterForeground中

    let user = UserDefaults.standard
        var interval = 0
        if let date = user.object(forKey: "activeDate") as? Date {
            interval = Int(Date().timeIntervalSince(date)); print ( "AppDeligate: Inactive interval: \(interval)")
        }
    if interval > 7200 { // 2hr
    // Initiate VC OR Refresh data here
    }
    

    如果您检查 applicationDidBecomeActive 中的时间间隔,则当您通过向下滑动或向上滑动查看控制中心通知时,应用程序会启动或刷新数据。所以 applicationWillEnterForeground 是最好的地方。

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 2012-06-15
      • 2011-04-11
      • 2017-09-12
      • 2016-04-24
      • 1970-01-01
      • 2013-07-07
      • 2015-10-30
      • 2013-10-21
      相关资源
      最近更新 更多