在iOS 4.0中未调用applicationWillTerminate委托方法 当我点击Home按钮时,我看到appWillResignActive和applicationDidEnterBackground委托方法被调用。
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"Application Did Resign Active");
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Application Did Enter Background");
}
当我双击Home按钮并再次启动Application时,我发现applicationWillEnterForeground和applicationDidBecomeActive委托方法被调用。
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"Application Will Enter Foreground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"Application Did Become Active");
}
但是我想知道何时调用applicationWillTerminate委托方法,在那里我做一些DB /文件备份例程。
- (void)applicationWillTerminate:(UIApplication *)application{
}
我甚至试图点击减号并删除在后台运行的App,但它仍然没有调用任何委托方法。
任何想法???
答案 0 :(得分:52)
来自iPhone应用程序编程指南:
即使您使用iPhone SDK 4及更高版本开发应用程序,您仍必须为应用程序终止做好准备。如果内存受限制,系统可能会从内存中删除应用程序以腾出更多空间。如果您的应用程序当前处于暂停状态,系统会在不事先通知的情但是,如果您的应用程序当前正在后台运行,则系统会调用应用程序委托的
applicationWillTerminate:
方法。您的应用程序无法通过此方法请求额外的后台执行时间。
是的,在iOS 4中通常不会经常调用applicationWillTerminate:
。如果必须保存数据,则应在applicationWillTerminate:
和applicationDidEnterBackground:
中执行此操作。
答案 1 :(得分:4)
WWDC 2010会话Adopting Multitasking on iPhone OS(Part 2)非常清楚地解释了应用程序状态转换。
答案 2 :(得分:2)
当用户点击iOS4中的“主页”按钮时,我有一个终止应用程序的解决方案。 这将调用applicationWillTerminate委托方法,而不是进入后台进程。
答案 3 :(得分:1)
实际上您也可以使用此步骤来执行此操作。