关于 applicationDidBecomeActive 和 applicationWillEnterForeground 的混淆

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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 是最好的地方。

【讨论】:

以上是关于关于 applicationDidBecomeActive 和 applicationWillEnterForeground 的混淆的主要内容,如果未能解决你的问题,请参考以下文章

scrapy 关于 rule, 关于多页

JS学习笔记关于选项卡,关于this,关于innerHTML

关于唯典冰淇淋新闻页的布局

关于prototype.js的一些技术说明

主页链接发送到关于/关于页面无法回家

关于写作