iPhone应用程序获取挂起/阻止UI几秒钟,同时从后台进入前台

时间:2012-04-10 08:46:43

标签: iphone objective-c ios ios5 ios4

我有一个非常复杂的应用程序,它包含几乎所有的UI部分。现在的问题是,当我在后台制作我的应用程序并再次进入前台时,我的 UI 阻止/挂起几秒钟。

JFYI。此问题同时出现在模拟器和设备上。

任何人都可以指导这个问题吗?如何在进入前台时处理应用程序?

我的应用程序是否包含如此多的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];
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我不确定,但是从您的代码中,我只能想到

[self performSelector:@selector(handleNotification:) withObject:nil afterDelay:1.0];

可能会阻止您的用户界面。我认为它执行你的DidBecomeActive方法,然后在一秒钟后延迟它开始执行handleNotification。因此,如果可能,请使用performSelectorInBackground,即如果您未在handleNotification:中执行任何与用户界面相关的更改。

[self performSelectorInBackground:@selector(handleNotification:) withObject:nil];

希望这有帮助。

如果您需要更多帮助,请与我联系。