3

バックグラウンド

  1. 私のアプリのユーザーは、完了ハンドラーを使用して非同期の AFNetworking HTTP 要求をスケジュールする、私のアプリで何かを行います。

  2. その後、遅滞なく、アプリのユーザーがホーム画面に移動し、アプリがバックグラウンドに入ります。

ネットワークは非常に遅いため、アプリは 20 秒後に応答を受け取ります。これは、バックグラウンド状態のときにネットワーク応答がアプリに到達することを意味します。

質問

  1. このネットワーク リクエスト、特にその完了ハンドラはどうなりますか?

  2. 私は、dispatch_async がそのブロックに渡されたすべてのものを保持していることを知っているので、ある時点で応答の完了ハンドラーが実行されることを期待していますか?

PS

アプリケーションがバックグラウンドにあるときに実行されることを意図した非同期 HTTP 要求を意味するのではなく、アプリが通常の状態にあるときに実行される通常の非同期 HTTP 要求を意味します。


更新 1

関連トピックで部分的な回答を見つけました:アプリが iOS で非アクティブ/バックグラウンド/一時停止状態に入ると、ディスパッチ キュー内のタスクはどうなりますか? .

私はすぐにそれを引用します:

アプリが一時停止されると、プロセス全体が凍結されます...一時停止前の GCD キューに存在するタスクは、再開時に消えません。彼らは決して去りませんでした。彼らは一時停止しただけです。

私が試した最も簡単なテストは次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    double delayInSeconds = 10.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        NSLog(@"I am alive!");
    });
    return YES;
}

このアプリを起動すると、すぐにバックグラウンドに移動し、(10 秒が経過するまで) 十分待ってからアクティブにします。コンソールに NSLog メッセージがどのように表示されるかを確認します。


がまだ理解していないのは、これが遅延HTTP応答にどのように適用されるかです-アプリがフリーズしている場合-それらはどのように処理されますか? アプリのバックグラウンドへの移行が遅延 HTTP 応答の処理方法にどのように影響するかを誰かが知っている場合は、その知識を共有してください!

4

1 に答える 1