我注意到在我开发的每个应用程序中都会出现一些情况。通常这不是什么问题,但在这个特定的应用程序中,如果能够“修复”它(即使这是一个bug),那就太好了。
重现问题的步骤:
- 启动应用程序,启动画面显示大约3秒钟,然后应用程序开始运行。
- 按Home键,应用程序进入后台。
- 从后台恢复应用程序(双击Home屏幕并选择它),会显示闪屏约半秒钟左右,然后应用程序重新启动。
是否有可能消除从后台返回时闪屏突然弹出约半秒钟的情况?对于这个特定的应用程序确实是一个问题。
我注意到在我开发的每个应用程序中都会出现一些情况。通常这不是什么问题,但在这个特定的应用程序中,如果能够“修复”它(即使这是一个bug),那就太好了。
重现问题的步骤:
是否有可能消除从后台返回时闪屏突然弹出约半秒钟的情况?对于这个特定的应用程序确实是一个问题。
我知道这个问题标记为“已回答”,但实际上答案在我的情况下是不正确的,我想分享一下。
起初,我得出的结论是,以上最准确的答案来自QueyJoh - “这是由iOS处理的...简短的回答:这是无法控制的。”
然而,经过试验,我成功地将问题定位为我info.plist文件中控制状态栏的条目。具体来说,我有“UIStatusBarHidden”和“UIStatusBarStyle”的条目。
从我的plist文件中删除这些条目立即停止了我的应用程序在从我的应用程序切换出去并再次返回时显示启动画面的情况。
问题解决了。
马修
LaunchScreen.xib
时,这并没有帮助我,但是当我使用 LaunchImage
时,这就不再需要了。 - Mohammad Zaid Pathan显然,这个问题一开始就不太聪明 :) 这个“问题”只在模拟器中发生。在设备本身上进行调试时,它的表现符合预期。
没有造成任何伤害。感谢每一个试图帮助我的人! :)
我也遇到了这个问题,现在我已经解决了。原因是你在 applicationDidEnterBackground 中做了太多的事情,尝试减少一些。
在 didFinishLaunchingWithOptions 方法中,您的代码应该用于显示启动画面。如果是这样,它只会在您的应用程序实际启动时出现,而不是从后台返回时出现。
可以使用类似以下的代码(我知道它使用旧的动画代码,但我相信您可以根据需要更新为块)...
splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 320, 460)];
splashView.image = [UIImage imageNamed:@"Default.png"];
[myWindow addSubview:splashView];
[myWindow bringSubviewToFront:splashView];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)];
splashView.alpha = 0.0;
[UIView commitAnimations];
然后创建一个名为startupAnimationDone的方法...
- (void)startupAnimationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[splashView removeFromSuperview];
[splashView release];
}
UIApplicationExitsOnSuspend
)。有些应用程序希望在用户将其置于后台时被“杀死”,因此它们使用此键。但是,要恢复您的应用程序,您必须允许它在后台运行(实际上是暂停,不必在后台实际工作)。 - Samapplication:didFinishLaunchingWithOptions:
中运行两次(通过断点或 NSLog 验证)?我不确定如果你没有使用UIApplicationExistsOnSuspend
键(将应用程序在后台时终止),如何让启动屏幕(default.png)每次启动应用程序都出现。除非... 应用程序在退出时意外地被杀死,例如在applicationDidEnterBackground:
或applicationWillResignActive:
中发生 SIGABRT。 - SamUIApplicationExistsOnSuspend
的默认值为 NO(意味着应用程序在后台时不会被杀死)。因此,请确保此键/值对丢失或设置为 NO,以便在后台时不会杀死您的应用程序。抱歉,我使用了大写字母来强调“no”和“not”,只是为了尽可能清楚。另外,当您将应用程序放入后台时,调试会话不应该结束,因此您应该能够在applicationWillEnterForeground:
上设置断点以验证您的会话未结束(应用程序未死亡)。 - Sam