我一直在使用互动式通知,当我的应用在后台暂停时效果很好,但在我的应用终止时会出现问题。
我已经使用NSLog来确定应用尚未启动时触发互动通知的应用生命周期。
以下列出的顺序如下,没有应用程序明显启动:
didfinishlaunching handleActionWithIdentifier viewDidLoad中 viewwilllayoutsubviews viewdidlayoutsubviews viewdidappear
然后应用似乎终止而没有打电话 didenterbackground或willTerminate
它为我造成问题的原因是因为我在viewdidload中创建了在didenterbackground中无效的计时器。
由于没有调用didenterbackground,因此在触发交互式通知后随后启动应用程序时,我最终会得到两个计时器实例。
有没有人可以解释为什么应用程序终止但是didenterbackground或者不会被调用?
答案 0 :(得分:0)
你不应该假设调用didfinishlaunching意味着你在前台。正如@PaulW11在他的评论中所说,当你的应用程序没有运行时,对于本地通知,你会直接进入后台,并且永远不会看到前景到后台的过渡,因为你从来没有在前台。 / p>
如果您被发送到前台,系统将调用applicationDidBecomeActive:
。您应该将启动计时器的代码放在那里。
文档说本地通知通知在后台调用:
当用户在远程或本地的警报中点击自定义操作时 通知,系统调用 应用:handleActionWithIdentifier:forRemoteNotification:completionHandler: 要么 应用:handleActionWithIdentifier:forLocalNotification:completionHandler: 后台方法,以便您的应用程序可以执行关联 动作。
您应该编写application:handleActionWithIdentifier:forLocalNotification:completionHandler:
方法来检查是从前台还是从后台调用它。
我使用(Objective-C)这样的代码来判断我是在前台还是在后台:
BOOL inBackground = [UIApplication sharedApplication].applicationState == UIApplicationStateBackground;