5

iPhone4/iOS6.0 デバイスで 4 ~ 5 秒かかることがわかりました。その間にシステムが何をしているのか知りたいのですが、アプリの起動時間を短縮するためのベスト プラクティスはありますか?

どうもありがとう。

編集: ログに記録すると、約applicationDidFinishLaunchingWithoptions1.5秒かかりました。アプリアイコンをタップしてから起動画面が消えるまで、3.5〜4秒(正確な時間を取得するために時計を使用しました)のようです。つまり、約電話をかける前にアプリを起動するのに2〜2.5秒applicationDidFinishLaunchingWithoptions

4

5 に答える 5

11

セッション 225 Up and Running: Making a Great Impression with Every Launch from WWDC 2012を視聴するだけで、アプリの起動をプロファイリングするプロセスを説明し、最も頻繁に犯される間違いに関するヒントを得ることができます。

于 2012-11-27T03:06:28.443 に答える
4

非常に優れた WWDC 2012 ビデオがあり、このトピックを正確に扱った長いシーケンスがあります: セッション 235 (応答性)。ぜひご覧になることを強くお勧めします。起動を高速化するための多くのヒントとコツ (あまりにも多くのライブラリにリンクしないなど) を提供し、測定方法と計測器での測定値の読み取り方法などを教えてくれます。

于 2012-11-27T03:07:06.067 に答える
2

アプリの起動に 4 ~ 5 秒かかる原因はシステムではありません。おそらく、ルート ビュー コントローラーの 、 、 、またはその他のセットアップ メソッドのapplicationDidFinishLaunchingコードinitです。viewDidLoad

「Time Profiler」インストゥルメントを使用して、実際のデバイスでアプリをプロファイリングします。アプリを起動するだけで、起動後に UI のボタンを押さないでください。起動中に何が起こっているかだけを確認したいだけです。

ウィンドウの左下にある [Call Tree] の下にある [Separate by Thread]、[Invert Call Tree]、[Hide System Libraries]、および [Show Obj-C Only] オプションをチェックすることをお勧めします。

選択したオプションを確認したら、メソッド呼び出しのリストを下に移動します。最も時間がかかるものから始めます (理由は明らかです)。シンボル名をダブルクリックすると、時間が費やされた場所に関する詳細情報を取得できます。幸運を!

于 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 に答える