アプリがバックグラウンド状態にあるとき、基本的にBluetoothドングルで動作し、サーバーとデータを送受信するときに、アプリには多くのタスクがあります。バックグラウンド状態のアプリがクエリを送信すると、システムがこのクエリで「フリーズ」することがあります。そして、アプリを起動した後、システムは「フリーズアウト」し、
Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed out.
現時点では、アプリは最後の AFNetworking 3.1.0 と BFTask ヘルパーを使用しています。
詳細については。ユーザーが何らかの理由でアプリを使用し、アプリがバックグラウンド状態になった後 (ユーザーがホームボタンを押すか、デバイスをロックした後)、アプリは通常バックグラウンド状態で動作し続けます。システムまたはユーザーがアプリを強制終了できます。アプリは、ウェイクアップの瞬間に (ジオロケーション サービス、ジオフェンシングを介して) 何らかのユーザー操作を行った後にウェイクアップできます。現時点では、ログで次のことを確認できます。
> Request method: POST url: https://******/v1/account/token headers: {
UserName = "***@***.com";
"grant_type" = password;
password = ****
} at time: 2016-08-15 15:30:45 +0000
コード:
if ([request.method isEqualToString:@"GET"]) {
return [manager GET:request.url parameters:request.params progress:nil success:^(NSURLSessionTask *operation, id responseObject) {
} failure:^(NSURLSessionTask *operation, NSError *error) {
processError(operation, error);
}
}];
ユーザーがアプリを起動してしばらくすると、このコードが実行を継続しようとすると、タイムアウトでエラーが発生します。
error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x156d8ce10
{Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)"
UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=https://******/v1/account/token, NSErrorFailingURLKey=https://******/v1/account/token, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.}
at time: 2016-08-15 15:46:28 +0000
ユーザーがアプリを再起動すると、約 16 分の時間差があります。そして、これは http クエリの別の部分にある可能性があります
問題は、iOS がバックグラウンドでクエリをフリーズする理由と、これを修正する方法です。