当app未启动时,handleActionWithIdentifier

时间:2016-05-14 10:23:28

标签: ios ios9 uilocalnotification

我一直在使用互动式通知,当我的应用在后台暂停时效果很好,但在我的应用终止时会出现问题。

我已经使用NSLog来确定应用尚未启动时触发互动通知的应用生命周期。

以下列出的顺序如下,没有应用程序明显启动:

didfinishlaunching handleActionWithIdentifier viewDidLoad中 viewwilllayoutsubviews viewdidlayoutsubviews viewdidappear

然后应用似乎终止而没有打电话 didenterbackground或willTerminate

它为我造成问题的原因是因为我在viewdidload中创建了在didenterbackground中无效的计时器。

由于没有调用didenterbackground,因此在触发交互式通知后随后启动应用程序时,我最终会得到两个计时器实例。

有没有人可以解释为什么应用程序终止但是didenterbackground或者不会被调用?

1 个答案:

答案 0 :(得分:0)

你不应该假设调用didfinishlaunching意味着你在前台。正如@PaulW11在他的评论中所说,当你的应用程序没有运行时,对于本地通知,你会直接进入后台,并且永远不会看到前景到后台的过渡,因为你从来没有在前台。 / p>

如果您被发送到前台,系统将调用applicationDidBecomeActive:。您应该将启动计时器的代码放在那里。

文档说本地通知通知在后台调用:

  

当用户在远程或本地的警报中点击自定义操作时   通知,系统调用   应用:handleActionWithIdentifier:forRemoteNotification:completionHandler:   要么   应用:handleActionWithIdentifier:forLocalNotification:completionHandler:   后台方法,以便您的应用程序可以执行关联   动作。

您应该编写application:handleActionWithIdentifier:forLocalNotification:completionHandler:方法来检查是从前台还是从后台调用它。

我使用(Objective-C)这样的代码来判断我是在前台还是在后台:

BOOL inBackground = [UIApplication sharedApplication].applicationState == UIApplicationStateBackground;