8

我刚拿到 iPhone SDK 4,我正试图停止开发我之前正在开发的应用程序。所以我同时实现 -(void)applicationDidEnterBackground:(UIApplication *)application- (void)applicationWillTerminate:(UIApplication *)application

当我在模拟器 4.0 中单击主页按钮时,它似乎工作正常。应用调用 -(void)applicationDidEnterBackground:(UIApplication *)application并进入后台状态..

但是,然后我双击主页按钮以显示在后台运行的应用程序,并按住它以显示减号或退出。当我单击减号时,调试器说

程序接收信号:“SIGKILL”

此外,- (void)applicationWillTerminate:(UIApplication *)application从不调用。我是否错过了在 OS4 上工作需要做的事情?或者至少有人可以指出我调试 SIGKILL 的方法。谢谢。

4

2 回答 2

13

-applicationWillTerminate:仅当您的应用程序在被要求退出时处于运行状态时才会调用。如果它已经处于挂起状态(正如您在此处所拥有的那样),系统只需向应用程序发送一个终止信号。当用户按下红色减号按钮手动终止应用程序以及系统决定放弃应用程序以释放前台应用程序的内存时,就会发生这种情况。

如果您的应用程序正在后台运行(例如播放音乐或运行一些后台任务)并且用户通过按减号按钮手动终止应用程序,那么您才会真正收到一条-applicationWillTerminate:消息。因此,您必须保存所有状态/等。在您从-applicationDidEnterBackground:.

于 2010-06-23T03:33:24.990 回答
2

这是可以预料的,多任务栏“红色关闭按钮”相当于强制退出 Mac OS X 上的应用程序。这是记录在案的行为。Apple 期望 iOS 4 的普通用户能够简单地启动/使用/关闭他们不必考虑终止进程或任何事情的应用程序。系统将管理它。

只需确保将任何重要数据保存在 application:willResignActive: 或 applicationWillEnterBackground 中。因为在那之后,当内存压力迫使系统清理时,你可能会被杀死...... Snow Leopard 为在其 Info.plist 中使用 NSSupportsSuddenTermination 键的应用程序引入了类似的行为。一个应用程序基本上告诉系统它会定期一点一点地保存数据,这样当它进入后台时,就没有什么可做或很少做。与大型单体应用程序桌面应用程序不同...

于 2010-06-23T22:24:58.580 回答