2014-09-10 63 views
1

在我的应用程序中,我使用后台服务,因此在用户终止应用程序时不会调用方法applicationWillTerminate:。相反,当用户将应用程序推入后台并且用户完全终止应用程序时,将调用方法applicationDidEnterBackground:用户强行终止应用程序:注册此事件

我遇到的问题是我需要能够区分用户何时将应用程序推入后台以及何时退出应用程序,因为我需要为两个事件触发不同的代码。

这是可能的在我的情况?

回答

1

当系统“很好地”以一种有序的方式终止应用程序(即,它没有为待处理任务执行后台操作,或者它告诉操作系统这些任务已完成)时,将调用该方法-applicationWillTerminate:。这与“用户强行终止应用程序”截然不同,在这种情况下,您的应用程序不会收到任何消息,因为它只是被一个项目符号总结为头部。

您确定您正确/完全参与后台服务吗?也就是说,你确定你正确地告诉系统你已经完成了吗?你应该编辑你的问题并发布相关的后台代码。例如,如果你使用-beginBackgroundTaskWithExpirationHandler:,文档说:

如果你不叫endBackgroundTask:时间到期前每个任务,系统杀死应用程序。

......这可能是你的问题吗?

+0

后台服务工作正常。该应用收集的位置更新没有任何问题。我需要知道应用程序被推入后台或终止的原因是,当推送到后台时,应用程序会注册本地通知。我不希望在应用程序终止时发生这种情况。 – freshking 2014-09-10 18:21:46

+0

对不起,我想我很难得到你要的东西。你的应用程序被后台或用户“退出”没有有效的区别;如果它不是活动的应用程序,请考虑终止/后台为*无论原因。对于位置服务,此行为在此处定义:https://developer.apple.com/library/ios/documentation/userexperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2- SW10你能更准确地知道你想要完成什么吗? – 2014-09-10 18:31:32

0

这可能是不可能的,但我可以想象区分两者的唯一方法就是等待下一个事件。 当下一个事件是“开始”时,您知道上一个事件是杀人事件。 当下一个事件是“前景”时,您知道上一个事件是背景。

这意味着在服务器上的一些处理,我知道。

希望这会有所帮助。