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 部分。现在的问题是,当我在后台创建应用程序并再次进入前台时,我的 UIblocked/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 运行时会挂起?

当应用程序进入后台时,在前台执行的长时间运行的任务被挂起

当网络连接不佳时,iOS 应用程序在启动时会挂起一段时间

为啥 USB CDC 在接收数据时会挂起?

当 iphone 应用程序进入后台或前台状态时,如何保存数据?

当应用程序从后台进入前台时,MPMoviePlayerController 黑屏