4

自分のアプリの起動時に、URL ハンドラーを使用して別のアプリケーションを起動しようとしています。

- (void)applicationDidBecomeActive:(UIApplication *)application
{        
     NSURL *actionURL = [NSURL URLWithString:@"fantastical2://"];
     [[UIApplication sharedApplication] openURL:actionURL];
}

基本的には機能しますが、アプリが表示されてから実際に URL を開くまでに約 7 秒の大幅な遅延があります。

遅れはどうして?自分のアプリを起動するときに URL/アプリをすぐに起動したり、この遅延を短縮したりするにはどうすればよいですか?

4

4 に答える 4

4

以下の例のいずれかを使用して解決できます。

diapatch_async の使用

dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] openURL:urlString];
});

perfoSelector の使用

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  ...

  //hangs for 10 seconds
  //[[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];

  //Fix: use threads!
  [self performSelector:@selector(redirectToURL:)
      withObject:url afterDelay:0.0];

  ...
}

- (void)redirectToURL:(NSString *)url
{
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];
}

NSスレッドの使用

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  ...

  //hangs for 10 seconds
  //[[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];

  //Fix: use threads!
  [NSThread detachNewThreadSelector:@selector(openBrowserInBackground:)
      toTarget:self withObject:url];

  ...
}

- (void)openBrowserInBackground:(NSString *)url
{
  [[UIApplication sharedApplication] openURL:[NSURL URLWithString: url]];
}
于 2017-02-27T07:33:28.273 に答える
0

が呼び出された後に呼び出される- (void)applicationDidFinishLaunching:(UIApplication *)applicationため、コードを追加します。- (void)applicationDidBecomeActive:(UIApplication *)applicationapplicationDidFinishLaunching

于 2013-11-12T09:22:43.920 に答える