Iphone 我如何知道应用程序是否被用户终止?

Iphone 我如何知道应用程序是否被用户终止?,iphone,ios,ipad,Iphone,Ios,Ipad,我如何知道应用程序是否被用户终止 (双击主页按钮并按下红色减号“-”按钮) 我需要示例代码或伪代码…有时您确实会收到UIApplicationWillTerminateNotification(您也可以在应用程序委托中实现applicationWillTerminate:方法),但不能保证在这种情况下您会收到任何通知。所以不要依赖它 如果您的应用程序处于“挂起”状态,即处于后台但未运行,您将不会收到通知。在挂起的情况下,您只会被不可捕获的SIGKILL杀死。当你因内存不足而被杀时也是如此 从应用

我如何知道应用程序是否被用户终止

(双击主页按钮并按下红色减号“-”按钮)


我需要示例代码或伪代码…

有时您确实会收到
UIApplicationWillTerminateNotification
(您也可以在应用程序委托中实现
applicationWillTerminate:
方法),但不能保证在这种情况下您会收到任何通知。所以不要依赖它

如果您的应用程序处于“挂起”状态,即处于后台但未运行,您将不会收到通知。在挂起的情况下,您只会被不可捕获的
SIGKILL
杀死。当你因内存不足而被杀时也是如此

应用程序的文档中,将终止:
(我的重点):

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


有时您确实会得到
UIApplicationWillTerminateNotification
(您也可以在您的应用程序委托中实现
applicationWillTerminate:
方法),但不能保证在这种情况下您会收到任何通知。所以不要依赖它

如果您的应用程序处于“挂起”状态,即处于后台但未运行,您将不会收到通知。在挂起的情况下,您只会被不可捕获的
SIGKILL
杀死。当你因内存不足而被杀时也是如此

应用程序的文档中,将终止:
(我的重点):

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

试试这个:

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
}
您应该在实现
uiapplicationelegate

还有一些注意事项:如果您通过Xcode(停止调试按钮)停止应用程序,则不会调用该方法。所以在测试时要有耐心。

试试以下方法:

- (void)applicationWillTerminate:(UIApplication *)application
{
    /*
     Called when the application is about to terminate.
     Save data if appropriate.
     See also applicationDidEnterBackground:.
     */
}
您应该在实现
uiapplicationelegate


还有一些注意事项:如果您通过Xcode(停止调试按钮)停止应用程序,则不会调用该方法。所以在测试时要有耐心。

当用户关闭应用程序时:

- (void)applicationWillTerminate:(UIApplication *)application{

}
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}
应用程序将进入非活动状态:

 - (void)applicationWillResignActive:(UIApplication *)application
 {
  NSLog(@"Application Did Resign Active");
 }
用户按下主页按钮:

- (void)applicationWillTerminate:(UIApplication *)application{

}
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

当用户终止应用时:

- (void)applicationWillTerminate:(UIApplication *)application{

}
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}
应用程序将进入非活动状态:

 - (void)applicationWillResignActive:(UIApplication *)application
 {
  NSLog(@"Application Did Resign Active");
 }
用户按下主页按钮:

- (void)applicationWillTerminate:(UIApplication *)application{

}
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}
此外,还有:

- (void)applicationDidEnterBackground:(UIApplication *)application {

}
如果您想知道它是否进入后台,可能会有所帮助;)

还有:

- (void)applicationDidEnterBackground:(UIApplication *)application {

}

如果您想知道它是否进入后台,可能会有所帮助;)

为什么??我想这是有保证的。但是,如果你在Xcode中停止你的应用程序,这是不能保证的。为什么?我想这是有保证的。但是,如果您在Xcode中停止应用程序,则无法保证。不会调用此方法。我检查了控制台(组织者设备)NSLog(@“应用程序将使用术语-”);不叫。我将此代码放在applictaionWillTerminate方法中。我总是在停止调试模式后进行测试。@Nekto:您不能保证在多任务应用程序中收到此方法。只有当你在后台但还没有被暂停时,你才能得到它。Thanx@DarkDust。然后,我建议@ChangUZ使用方法
-(void)applicationIdentinterbackground:(UIApplication*)application
。。。也许这会对你有所帮助。这个方法没有被调用。我检查了控制台(组织者设备)NSLog(@“应用程序将使用术语-”);不叫。我将此代码放在applictaionWillTerminate方法中。我总是在停止调试模式后进行测试。@Nekto:您不能保证在多任务应用程序中收到此方法。只有当你在后台但还没有被暂停时,你才能得到它。Thanx@DarkDust。然后,我建议@ChangUZ使用方法
-(void)applicationIdentinterbackground:(UIApplication*)application
。。。它可能会帮助你检查应用程序是否调用了WillTerminate?我尝试过从springboard和XCode中删除应用程序,但它没有被调用,我认为你必须实现ApplicationIdentinterBackground,以确保你的应用程序符合你的要求。我设法使此方法工作的唯一方法是禁用“多任务”在应用程序的Info.plist中。这是确保始终调用此方法的唯一方法。但是,这不是一个好的解决方案,所以只需在ApplicationIdentinterBackground中执行任务您是否检查了applicationWillTerminate是否被调用?我尝试过从springboard和XCode中删除应用程序,但它没有被调用,我认为你必须实现ApplicationIdentinterBackground,以确保你的应用程序能够实现你想要的功能。我实现此方法的唯一方法是在应用程序的Info.plist中禁用“多任务处理”。这是确保始终调用此方法的唯一方法。但是,这不是一个好的解决方案,所以只需在ApplicationIdentinterBackground中执行任务即可