Динамически рассчитывать время загрузки приложения - PullRequest
0 голосов
/ 15 мая 2010

Как запустить часы, позволяющие измерить время загрузки до запуска appDidFinishLaunching?

Я хочу установить спящий вызов, который увеличивает время показа Defaul.png до 3 секунд независимо от скорости основного оборудования.

1 Ответ

0 голосов
/ 15 мая 2010

Прежде всего, вы должны знать, что Springboard в iPhone OS довольно требователен ко времени загрузки. Вы никогда не должны делать спящий вызов где-нибудь в процессе загрузки вашего приложения. Если Springboard обнаружит, что запуск вашего приложения занимает слишком много времени, ваше приложение будет прервано с «не удалось запустить вовремя» в журнале сбоев.

Во-вторых, насколько я знаю, нет способа измерить время, затраченное на запуск вашего приложения. Когда пользователь нажимает значок приложения на трамплине, происходит несколько вещей, и iPhone OS не предоставляет полезной информации вашему приложению.

Одним из решений может быть обеспечение того, чтобы ваш applicationDidFinishLaunching: был очень легким, и создание «поддельного» наложения Default.png. Обрезав свой метод applicationDidFinishLaunching:, чтобы он выполнял только самые важные задачи, и выполняя любые трудоемкие задачи в фоновом режиме, вы можете гарантировать, что ваше наложение Default.png будет отображаться примерно одинаково на другом оборудовании.

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Create the image view posing with default.png on top of the application
    UIImageView *defaultPNG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
    // Add the image view top-most in the window
    [window addSubview:defaultPNG];

    [window makeKeyAndVisible];

    // Begin doing the time consuming stuff in the background
    [self performSelectorInBackground:@selector(loadStuff) withObject:nil];

    // Remove the default.png after 3 seconds
    [self performSelector:@selector(removeDefaultPNG:) withObject:defaultPNG afterDelay:3.0f];
}

- (void)removeDefaultPNG:(UIImageView *)defaultPNG {
    // We're now assuming that the application is loaded underneath the defaultPNG overlay
    // This might not be the case, so you can also check here to see if it's ok to remove the overlay
    [defaultPNG removeFromSuperview];
    [defaultPNG release];
}

Если вы добавляете больше представлений (ваших контроллеров представлений и т. Д.) В методе loadStuff, вы должны вставить их под наложением defaultPNG. Вы также должны знать о проблемах, которые могут возникнуть при выполнении этих действий из другого потока. Вы можете использовать performSelectorOnMainThread:withObject:waitUntilDone:, если у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...