如果我的应用程序在后台运行超过5分钟,我想执行导航以锁定屏幕视图控制器。这是我的代码。但是有时它会按预期运行,有时却无法运行。怎么解决?
private var lockTimer: Timer?
func applicationDidEnterBackground(_ application: UIApplication) {
lockTimer = Timer.scheduledTimer(withTimeInterval: 300, repeats: false) { _ in
// Navigation code
}
}
func applicationWillEnterForeground(_ application: UIApplication) {
lockTimer?.invalidate()
lockTimer = nil
}
答案 0 :(得分:2)
背景任务不能保证在iOS上运行很长时间。有多种方法可以提高完成here或here详细的后台任务的机会。
您可以通过另一种方法来实现此目的:节省时间(例如,使用用户默认设置),应用进入后台,然后当应用再次打开时,您检查时间并移至锁定屏幕(如果已结束) 5分钟。
答案 1 :(得分:-1)
尝试以下方法:
func applicationDidEnterBackground(_ application: UIApplication) {
let defaults = UserDefaults.standard
defaults.set(Date(), forKey: "LastInactiveDate")
defaults.synchronize()
}
func applicationWillEnterForeground(_ application: UIApplication) {
let defaults = UserDefaults.standard
if let lastInactiveDate = defaults.object(forKey: "LastInactiveDate") as? Date{
let seconds = Date().timeIntervalSince(lastInactiveDate)
print("Seconds ::" , seconds)
if seconds >= 300{
//Do any thing here to lock the app
}
}
defaults.set(nil, forKey: "LastInactiveDate")
defaults.synchronize()
}