我对上面两个应用程序委托方法有些困惑:我读了这个link,它表明在调用applicationDIdBecomeActive之前将调用applicationWillEnterForeground。我不确定以前的方法。
如果我有社交应用:在我的applicationWillEnterForeground函数中,我将检查是否存在当前用户会话;在我的applicationDIdBecomeActive中,我将在timelineViewController上重新加载内容:因此,如果没有当前用户会话,则无法显示时间轴。假设用户从后台输入应用程序而没有当前用户会话,applicationWillEnterForeground将显示一个登录页面以指示没有用户,但是,下一个被调用的applicationDIdBecomeActive会返回到不应该显示的时间轴吗?
如果我不想修改其他viewcontroller中的代码,或者在applicationDIdBecomeActive中检查用户会话。我可以在applicationWillEnterForeground函数中添加任何代码以防止applicationDIdBecomeActive函数运行吗?
另一个问题:我注意到对于像Facebook这样的应用程序,如果我按下主页按钮,将其转为背景,但立即将其转回屏幕,该应用程序不会显示很多变化;但是,如果我让它在背景中停留一个小时,它将会“冻结”#34;当我把它变回前景时,有一段时间(看起来很清爽)。委托方法如何设计实现这一点?系统是否根据应用程序在后台停留的时间来决定调用哪种委托方法(以上两种)?
BTW,我使用swift作为iOS的主要编程语言
答案 0 :(得分:0)
您无法阻止applicationDidBecomeActive
被调用。
您可以在applicationWillEnterForeground
中设置一个实例变量,稍后会读取该变量以确定您的应用程序使用的流程。
答案 1 :(得分:0)
要在Facebook等特定时间间隔后刷新或启动VC应用,您可以执行以下操作:
在applicationDidEnterBackground
中let app = UserDefaults.standard
let date = Date()
app.set(date, forKey: "activeDate")
在applicationWillEnterForeground
中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是最好的选择。