繁体   English   中英

iOS应用程序在模拟器中以后台模式工作,但在设备中不工作吗?

[英]iOS app works in background mode in simulator but not in device?

我正在编写一个时间跟踪应用程序,它可以在模拟器中完美运行。 我在9:00按开始,锁定屏幕,在9:05回来,计时器调整为5分钟。 但是,在我的实际设备上,后台没有任何反应。 是什么原因造成的?
这是我的后台模式代码。 我还检查了目标功能中的后台模式。

进入背景模式时,找到日期以计算背景时间。

func appGoesIntoBackground() {
    if isActivityPaused == false {
        quitDate = NSDate()
    }
}

从后台加载后,计算它在后台运行多长时间并显示出来。

  func appLoadedFromBackground() {
    if isActivityPaused == false {
        let passedSecondsTillInactive = 
  NSDate().timeIntervalSinceDate(quitDate!)
        passedSeconds += Int(passedSecondsTillInactive)
    }
   }

保存到历史记录。 如果我切掉startDate = nil并选择了nActivity = nil,则在模拟器中将无法使用。

func saveActivityToHistory() {
    CoreDataHandler.sharedInstance.saveHistory(choosenActivity!.name!, 
startDate: startDate!, endDate: NSDate(), duration: passedSeconds)
    startDate = nil
    choosenActivity = nil
    passedSeconds = 0
    loadCoreDataEntities()
}

在这种情况下,我看不到任何背景模式的原因。 我建议您以其他方式将quitDate保留为userDefaults,plist文件或Core Data。 这样,应用程序进入后台后发生什么情况都无关紧要,无论持续多久也无关紧要。 您在唤醒后从持久数据中检索退出日期,然后按预期进行。

介于8.0和11.0 Beta 2之间的iOS Simualtor运行时无法暂停后台任务。 从iOS 11.0 Beta 3 Simulator(它是Xcode 9.0 Beta 3的一部分)开始,此问题已得到解决。 后台运行的应用程序应适当地暂停以更好地匹配设备行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM