5

我发现在 iPhone4/iOS6.0 设备上花了 4-5 秒,我想知道那段时间系统在做什么,是否有任何缩短应用程序启动时间的最佳做法?

非常感谢。

编辑: 我记录它并在applicationDidFinishLaunchingWithoptions: 中花了大约 1.5 秒,从我点击应用程序图标到它的启动屏幕消失大约需要 3.5-4 秒(我使用时钟来获得更精确的时间)。也就是说,大约调用前 2-2.5 秒启动应用applicationDidFinishLaunchingWithoptions

4

5 回答 5

11

只需观看 Session 225 Up and Running: Making a Great Impression with Every Launch from WWDC 2012,它将带您完成应用程序启动分析的过程,并就最常犯的错误提供提示,非常棒。

于 2012-11-27T03:06:28.443 回答
4

有一个非常非常好的 WWDC 2012 视频,其中有很长的序列专门针对这个主题:Session 235(响应性)。我强烈建议您观看。它为您提供了许多加快启动速度的提示和技巧(不要链接到太多库等),告诉您如何测量以及如何在 Instruments 中读取测量值等。

于 2012-11-27T03:07:06.067 回答
2

系统不是导致您的应用程序需要 4-5 秒才能启动的原因。它可能是您的代码applicationDidFinishLaunching,或者您的根视图控制器的init,viewDidLoad或其他设置方法。

使用“时间分析器”仪器在真实设备上分析您的应用程序。启动您的应用程序,一旦启动就不要按 UI 上的任何按钮。我们只想看看发布期间发生了什么。

我建议检查窗口左下方“调用树”下的“按线程分离”、“反转调用树”、“隐藏系统库”和“仅显示 Obj-C”选项。

一旦您检查了您选择的选项,请查看方法调用列表。从那些花费最多时间的人开始(出于显而易见的原因)。您可以双击符号名称以获取有关时间花费的更多详细信息。祝你好运!

于 2012-11-27T03:03:17.443 回答
1

我们遇到了同样的问题。

最终,我们通过在 viewDidAppear 中预加载视频显着加快了发布时间。当用户点击播放按钮启动电影时,已经加载了足够多的内容,几乎可以立即开始播放。

例如:

- (void)viewDidAppear:(BOOL)animated {
    NSURL *movieURL = [NSURL URLWithString:@"http://static.example.com/movie.mov"];
    MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
    vc.moviePlayer.shouldAutoplay = NO;
    [vc.moviePlayer prepareToPlay];
    self.moviePlayerViewController = vc;
}

此博客文章中的全部详细信息:http: //blog.tetherpad.com/blog/2013/3/22/improving-tutorial-movie-load-times-on-ios-for-fun-and-profit

于 2013-03-24T11:22:15.710 回答
0

在我看来,启动时间主要是功能成本,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

如果你做了一堆阻止进程的事情,启动将需要很长时间。

因此,您可以applicationDidFinishLaunching通过删除一些您以后可以做的不必要的代码来优化您的代码。或者您可以使您的代码非阻塞,例如,您应该使用异步网络请求applicationDidFinishLaunching而不是同步请求。

于 2012-11-27T03:20:51.067 回答