【问题标题】:Background Task works on Simulator only后台任务仅适用于模拟器
【发布时间】:2015-06-03 21:04:13
【问题描述】:

背景

我创建了一个示例计时器应用程序,该应用程序从特定值倒数到零。一个标签显示还剩多少时间。

每次NSTimer(1 秒间隔)调用countDownSecs() 时,它都会打印还剩多少秒并执行println("countDownSecs()")。当倒计时达到0 秒时,它会发送本地推送通知。
当在工作模拟器中运行时,它甚至会停留在后台并持续打印剩余的秒数和countDownSecs() 5 分钟。
另一方面,在实际设备(iPhone 4S、iOS 8.1.3 和 iOS 8.3)上运行时,它会在进入后台时立即停止。 (它之前在 iOS 8.3 上运行过。我认为这可能是因为 iPhone 4S 无法处理,但 iPhone 4S 模拟器运行良好。)

代码

AppDelegateapplicationDidEnterBackground() 中,UILocalNotification 的代码如下:

var alarmTime: NSDate = NSDate()
var app: UIApplication = UIApplication.sharedApplication()
var notifyAlarm: UILocalNotification = UILocalNotification()

//counterAll contains the total amount of seconds        
alarmTime.dateByAddingTimeInterval(NSDate.timeIntervalSinceReferenceDate())
notifyAlarm.fireDate = NSDate(timeIntervalSinceNow: counterAll)
notifyAlarm.timeZone = NSTimeZone.defaultTimeZone()
notifyAlarm.repeatInterval = NSCalendarUnit(0)
notifyAlarm.soundName = "Time's Up.m4a"
notifyAlarm.alertBody = "Time's Up! - Your timer has ended."
app.scheduleLocalNotification(notifyAlarm)

问题

我可以更改任何内容来解决此问题吗?

提前致谢:)

【问题讨论】:

  • alarmTime 不应该是 fireDate 吗?
  • alarmTime 始终为 0,所以我使用了 NSTimeInterval counterAll。通知运行良好。
  • 你注册UserNotificationSettings了吗?
  • 是的,正如我所说,通知工作正常。
  • 我认为你应该使用 NSTimer(fireDate:) 而不是使用倒计时

标签: ios swift timer background-process uilocalnotification


【解决方案1】:

默认情况下,NSTimer实际设备的后台不起作用。它仅适用于模拟器。但是,您可以使用 UIApplications 方法 beginBackgroundTaskWithExpirationHandler 执行后台任务,但是 Apple 为后台执行设置了硬性限制(如果我没记错的话,只有 180 秒)。

建议使用UILocalNotifications 而不是后台任务。

【讨论】:

  • 首先,感谢您抽出宝贵时间。其次,我不相信这是真的。正如我所写,它根据实际建议起作用,但我不记得有什么不同/什么时候停止工作并且无法将其恢复到该版本。我还写道,我已经在使用UILocalNotifications,这使它首先工作。
  • 也许您以前使用过后台任务?因为当应用进入后台模式时,任何代码都应该停止。
  • 不知道后台任务是如何工作的。当我在applicationDidEnterBackground() 中实现UILocalNotification 时,它开始起作用了。另请注意,即使我完全退出应用程序(从多任务处理),通知仍然有效。
  • 是的,UILocalNotifications 即使在应用程序关闭时也能工作,因为它们不是后台任务。
  • 这里来自 Apple 开发人员文档,用于后台执行:developer.apple.com/library/ios/documentation/iPhone/Conceptual/…
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2020-10-12
  • 2013-07-19
相关资源
最近更新 更多