嗨,我已经阅读了几个关于applicationWillTerminate被调用而没有被调用的问题.
我想总结一下我的理解,因为有几个帖子的说法不同.
对于IOS(没有多任务处理),在按下主页按钮时始终会调用它.
适用于IOS 4及以上版本
一个.按主页按钮时不会调用它(当应用程序移动到后台时)
湾 从多任务停靠平台关闭应用程序时调用它,如果应用程序在info.plist中有一个突然终止标志禁用,则不会调用它.(我设置"应该应用程序应该死亡事件",甚至在从多任务停靠点关闭应用程序时,终止功能没有被调用)
基于此,我有几个问题
设置应用程序应该获取App Died事件标志是一个好习惯吗?(我设置"应该应用程序应该死亡事件",甚至在从多任务停靠点关闭应用程序时,终止功能没有被调用)
要么
注册"UIApplicationWillTerminateNotification"比info.plist设置更好吗?
基本上我只需要在应用程序终止时做一些工作,而不是在它移动到后台时做.
要么
编辑(1):当应用程序终止时,以下内容被发送到APP.我怎么抓住它?
程序收到信号:"SIGKILL".
编辑(2):
请注意:从多任务底座上卸下时,不会在IOS 4及更高版本中调用它.你可能会认为是.但就我而言,事实并非如此.
我问是否有人知道为什么?还有别的我想念的东西.
另请注意我设置了"应用程序应该获取App Died事件",即使这样也没有被调用.
编辑(3):
以下问题的答案也不起作用. applicationWillTerminate不会被调用
有人像我一样面临类似的问题吗?
Ste*_*ton 49
总之,除非你有UIApplicationExitsOnSuspend你的Info.plist设置为YES,在iOS4的上面还有不能保证applicationWillTerminate:永远不会被调用.
正如文件所说:
对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台.然而,这种方法可以在其中应用程序在背景中(未暂停)运行情况被调用,该系统需要终止它由于某种原因
(强调我的.)
如果您需要在应用程序退出之前执行某些操作,则需要执行此操作applicationDidEnterBackground:.没有办法抓住SIGKILL.
And*_*ger 28
我看到-applicationWillTerminate:通过以下测试被调用.在一个新项目中(我使用了"单一视图应用程序"模板),将以下内容添加到AppDelegate:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"%s", __PRETTY_FUNCTION__);
__block UIBackgroundTaskIdentifier identifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
if (identifier != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:identifier];
identifier = UIBackgroundTaskInvalid;
}
}];
dispatch_async(dispatch_get_main_queue(), ^{
for (int i=0; i < 20; i++) {
NSLog(@"%d", i);
sleep(1);
}
if (identifier != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:identifier];
identifier = UIBackgroundTaskInvalid;
}
});
}
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
Run Code Online (Sandbox Code Playgroud)
当应用程序进入后台时,此示例将启动后台任务.该任务只是一个20秒的延迟(每秒记录一次),使应用程序在后台运行(注意在后台运行和暂停之间的差异)足够长,以允许它从应用程序切换器中被杀死.
因此,要测试它,运行应用程序,点击主页按钮将应用程序发送到后台,然后在20秒延迟启动之前,从应用程序切换器中删除应用程序.在20年代结束后,-applicationWillTerminate:被称为.您可以在Xcode中观看控制台以验证是否是这种情况.
我在iOS模拟器中为iOS 5.1和6.1(都是iPhone)试过这个,并且在两种情况下都看到了它.我还在运行iOS 6.1.2的iPhone 4S上进行了测试,看到了同样的行为.
| 归档时间: |
|
| 查看次数: |
46195 次 |
| 最近记录: |