如何知道应用程序是否正在iOS中终止?

时间:2015-07-21 12:59:07

标签: ios appdelegate terminate

- (void)applicationDidEnterBackground:(UIApplication *)application {
    //...function_a call    
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    //...function_b call    
}

- (void)applicationWillTerminate:(UIApplication *)application {
    //...function_c call    
}

我正在使用AppDelegates方法跟踪我的应用。它的工作正常,如果应用程序只是从背景上升到前景。但是当我尝试从正在运行的应用程序中删除我的应用程序时,它会首先调用- (void)applicationDidEnterBackground:(UIApplication *)application,然后调用- (void)applicationWillTerminate:(UIApplication *)application。我如何知道- (void)applicationDidEnterBackground:(UIApplication *)application该应用正在终止。平均而言,我不希望function_a调用两次,而只应在app进入后台时调用。

更新

甚至设置观察者也无济于事。

UIApplicationDidEnterBackgroundNotification
UIApplicationWillEnterForegroundNotification
UIApplicationWillTerminateNotification

1 个答案:

答案 0 :(得分:1)

- (void)applicationWillTerminate:(UIApplication *)application

  

此方法可让您的应用知道它即将被终止并完全从内存中清除。您应该使用此方法为应用程序执行任何最终清理任务,例如释放共享资源,保存用户数据以及使计时器无效。您执行此方法大约需要五秒钟来执行任何任务并返回。如果方法在时间到期之前没有返回,系统可能会完全终止该进程。

     

对于不支持后台执行或与iOS 3.x或更早版本链接的应用,当用户退出应用时,始终会调用此方法。对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台。但是,可以在应用程序在后台运行(未暂停)并且系统因某种原因需要终止它的情况下调用此方法。

所以这是委托方法,以便知道应用程序何时被用户或系统终止,而- (void)applicationWillTerminate:(UIApplication *)application只要应用程序进入后台就会运行,它并不意味着它已被退出,除非您的退出意味着不可见