当用户在iPhone上杀死应用程序时,有没有办法执行最后的操作?
在UIApplicationDelegate中有applicationWillTerminate:但据我所知,它不能保证在应用程序终止时被调用。还有另一种方式吗?
答案 0 :(得分:3)
你不能依赖applicationWillTerminate
被召唤。来自文档:
对于不支持后台执行或与iOS 3.x或更早版本链接的应用,当用户退出应用时,始终会调用此方法。对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台。但是,可以在应用程序在后台运行(未暂停)并且系统因某种原因需要终止它的情况下调用此方法。
保存任何状态的正确位置是应用程序进入后台时。一旦发生这种情况,就无法知道应用程序是否会返回到前台,或者它是否会被杀死然后从头开始。
答案 1 :(得分:0)
当您使用其中一个项目模板时,有关您的应用状态的所有方法都在您的 AppDelegate 中。
将代码放入applicationWillResignActive:
方法中。如果您的应用程序进入非活动状态(终止或否),它将被调用。
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
答案 2 :(得分:0)
保存状态的“正确”位置在 -applicationDidEnterBackground:
和-applicationWillTerminate:
中。不要担心双重保存;通常只调用其中一个(当你的应用程序在后台被杀死时,不会调用IME,-applicationWillTerminate:
。)
警告:-applicationDidEnterBackground:
未被保证被调用,因为在您的应用进入后台后,它被称为因此有资格杀死,恕不另行通知!)。如果您的应用程序背景时设备内存不足,则可能会被杀死。避免这种情况的最佳方法是首先不要使用太多内存。
你可以使用
-applicationWillResignActive:
,但我不建议:应用程序频繁变为非活动状态。显而易见的是系统对话框(位置/隐私提示,Wi-Fi,显示为警报,警报的通知),TWTweetSheet,我怀疑MFMailComposeViewController,MFMessageComposeViewController,Notification Center,应用程序切换栏(例如更改曲目/启用方向锁定) )。
答案 3 :(得分:-1)
你可以在appdelegate中使用applicationWillResignActive方法,或者你可以做以下事情,如果你想保存东西,但由于某种原因,你不想在app delegate中这样做:
- (void) viewDidLoad/init {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(myApplicationWillResign)
name:UIApplicationWillResignActiveNotification
object:NULL];
}
- (void) myApplicationWillResign {
NSLog(@"About to die, perform last actions");
}