2010-11-28 9 views
7

私はNSURLConnectionを使って、iOSで非同期的にリソースをダウンロードしています。NSURLのNSURL接続とマルチタスキング

私のアプリはiOS 3からiOS 4にアップデートしています。私のアプリは位置認識型ではないため、voip、バックグラウンドミュージック、私は何かをする必要があると思う。

私の質問は、現在実行中のNSURLConnectionはどうなりますか?アプリがフォアグラウンドに戻ったときに中断され、魔法のように再開されますか、それとも完全に殺されますか?後者の場合、後で自動的に再開するための標準的な戦略は何ですか? NSURLConnectionというオープンソースのサブクラスがありますか?

+0

は、このトピックに関するあなたの研究を投稿しています、私や他の人のための参考になります:) –

答えて

1

最大10分間実行されるタスクを開始できます。この目的で、beginBackgroundTaskWithExpirationHandler: APIを使用してください。ちょっと注意してください。あなたのタスクが時間がかかりすぎると、OSによって殺されます。

+0

質問... '私の質問は、NSURLConnectionが現在実行されていることです。アプリがフォアグラウンドに戻ったときに中断され、魔法のように再開されますか、それとも完全に殺されたのですか? – gcamp

+0

実際はそうです。 * ANY *コードは、バックグラウンドに置かれても生き残ることができます。ユーザーが終了してもダウンロードがバックグラウンドで実行されるようにするには、アプリが移行状態を開始する前にバックグラウンドタスクを開始する必要があります。タスクをキャンセルする必要がある場合は、そのためのAPIもあります。 – jer

+0

アプリを再開した後、 'NSURLConnection'はどうなりますか?私は 'connection:didFail ...:'デリゲートメッセージを受け取りますか? – Yuji

1

NSURLConnectionは実際に中断され、アプリケーションがフォアグラウンドに入ると再び開始されます。ちょうどあなたがそうのように実行していないの中断からアプリケーションが移動した場合、接続を殺すことを確認してください:本当に答えていません

- (void)applicationWillTerminate:(UIApplication *)application { 
    if (self.downloadConnection != nil){ 
     [self.downloadConnection cancel]; 
    } 
} 
+0

アプリの終了時に自動的に接続が切断されるのではないですか? – Yuji

+0

はいアプリが終了すると、接続が強制終了されますが、アプリがバックグラウンドに入ったときは終了しません。 – marchinram

+0

これは役に立たない。 1.マルチタスクを使用するアプリケーション(今日のすべてのアプリケーション)は、applicationWillTerminate:メソッドを使用しません。 2.アプリケーションが終了すると、キャンセルされ、アプリのライフサイクルが自動的に終了すると、なぜリクエストをキャンセルする必要があるのですか? 3.また、アプリがバックグラウンドに入ったときにNSURLConnectionsを殺すべきではないので、 'cancel'アプローチはあらゆる意味で間違っています。 – JonasG