0

Azure Mobile Service データベースに定期的にレコードを挿入する iOS アプリケーションがあります。アプリケーションが非アクティブになったとき (つまり、アプリ デリゲートの applicationWillResignActive メソッドが呼び出されたとき) にレコードを挿入して、クライアント セッションが終了したことを AMS アプリケーションに伝えたいと思います。

applicationWillResignActive または applicationDidEnterBackground からレコードを挿入しようとすると、完了ブロックに到達しません。AMS の挿入が完了する前にアプリのデリゲート メソッドが戻らないようにするために、usleep を呼び出して、挿入完了ブロックで設定したフラグをチェックしながら、ループ内で 100 ミリ秒遅延させようとしました。

この状態では、AMS クライアント ライブラリに必要な実行ループまたは操作キューがサービスされていないのではないかと思いますが、AMS クライアント ライブラリのドキュメントには、それが事実であるかどうかを判断するのに十分な詳細がありません。

これはかなり一般的なシナリオのようです - 他の誰かがこれに遭遇しましたか?

4

1 に答える 1

0

applicationWillResignActive からネットワーク リクエストを行うことは、iOS によって嫌われていると確信しています。このメソッドは、追加のリソースを利用するのではなく、物事をクリーンアップするために使用されます。ただし、iOS がアプリをバックグラウンドで一定期間実行し続けるように要求することはできます。次のようなことができるはずです。

UIBackgroundTaskIdentifier taskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

    //Perform call to mobile service
    myservice.dosomething(Completion:^{
        //Call to mobile service is done
        [[UIApplication sharedApplication] endBackgroundTask:taskID];
    });

}];

これにより、呼び出しを行い、応答を返すことができるはずです。ただし、iOS は、必要に応じて、これが完了する前にアプリを強制終了できることを覚えておいてください。

于 2013-08-07T23:52:45.890 に答える