iPhone 应用程序在从后台进入前台时会挂起/阻止 UI 几秒钟
Posted
技术标签:
【中文标题】iPhone 应用程序在从后台进入前台时会挂起/阻止 UI 几秒钟【英文标题】:iPhone App gets Hang/Blocks the UI for few seconds while coming in foreground from background 【发布时间】:2012-04-10 08:46:43 【问题描述】:我有一个非常复杂的应用程序,其中包含几乎所有 UI 部分。现在的问题是,当我在后台创建应用程序并再次进入前台时,我的 UI 会blocked/Hangs 几秒钟。
仅供参考。这个问题在模拟器和设备上都有。
任何人都可以指导这个问题吗?应用进入前台如何处理??
是不是我的应用包含这么多 UI 部分,需要重新初始化所有内容??或者是否有任何 ios 特定的处理方式??
我听说 iOS 在进入后台和前台时会序列化和反序列化对象。请提供一些指导链接左右..谢谢
编辑:
if(isInActive)
if([UIApplication sharedApplication].applicationIconBadgeNumber != 0)
//User canceled the Notification alert but badge is still there which indicates that
//the push notification had arrived...
[self performSelector:@selector(handleNotification:) withObject:nil afterDelay:1.0]; //change: From 2.0 to 1.0
isInActive = NO;
int curTime = (int)ceil([[NSDate date] timeIntervalSince1970]);
int storedTime;
int timeDiff;
storedTime = [[NSUserDefaults standardUserDefaults] integerForKey:@"logOffDuration"];
if(storedTime > 0)
timeDiff = curTime - storedTime;
int delay = [[LogOffMgr getInstance].LogOff.delay_ intValue]/1000;
if(timeDiff > delay)
[[LogOffMgr getInstance] stop];
[[LogOffMgr getInstance] LogOffTimer_tick];
【问题讨论】:
回到前台有服务器通讯/数据下载吗? 这个问题完全取决于你在做什么以及 yoru app 在进入后台和进入前台时的状态。由于无法获得该信息,我们所能做的就是疯狂(而且可能不准确)推测。 @Rupesh:目前我没有任何这样的服务器通信。 @borrrden:我猜你是对的。但如果你能提供的话,我只想要一个一般指导方针。我想请其他人不要投反对票。 @DShah:在此处发布您的代码,以了解当应用程序从后台进入前台时您会做什么? 【参考方案1】:我不确定,但从你的代码,我只能想
[self performSelector:@selector(handleNotification:) withObject:nil afterDelay:1.0];
可能会阻止您的用户界面。我认为它会执行您的DidBecomeActive
方法,然后在延迟几秒钟后开始执行handleNotification
。因此,如果可能,请使用performSelectorInBackground
,即如果您没有在handleNotification:
中进行任何与用户界面相关的更改。
[self performSelectorInBackground:@selector(handleNotification:) withObject:nil];
希望这会有所帮助。
如果您需要更多帮助,请告诉我。
【讨论】:
以上是关于iPhone 应用程序在从后台进入前台时会挂起/阻止 UI 几秒钟的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的自托管 NancyFX 应用程序在通过 HTTPS 运行时会挂起?