0

アプリケーションが実行中に作成するデバッグ ファイルを調べていたところ、奇妙な動作が見られました。アプリケーションはNSURLConnction、サーバーからデータを取得するために使用します。接続が開始された後、ユーザーがホーム ボタンを押してアプリケーションをバックグラウンドに移動した可能性があります (application:willResignActiveメソッドapplication:didEnterBackgroundが呼び出されました)。application:didEnterBackgroundが呼び出された後、コードで接続が処理されていることがわかりました。(デリゲートの は の後に呼び出されましたconnectionDidFinishLoading) 。の実装ではいくつかの操作を実行しますが、この時点でアプリケーションはおそらく中断され、コードは呼び出されませんでした。その後、ほぼ 12 時間後にユーザーがアプリケーションを再度起動し (アプリケーションは終了せず、バックグラウンドでのみ実行されました)、コードは停止した時点から実行を続けました。NSURLConnectionapplication:didEnterBackgroundconnectionDidFinishLoadingapplication:willEnterForegroundapplication:didBecomeActive呼ばれた)。それはシーンを作りますか?アプリケーションがフォアグラウンドに入る前に実行されていたコードの一部が、アプリケーションの内部状態を変更し、奇妙な動作を引き起こしました。

それを解決する方法はありますか?

4

1 に答える 1

0

受け取った後、application:didEnterBackground約 5 秒で最後の作業を行います。その後、アプリケーションは CPU でスケジュールされなくなります。

あなたの場合、最善の解決策はbeginBackgroundTaskWithExpirationHandler:、ダウンロードと関連タスクを介してバックグラウンド作業の開始を通知し、終了することです。

于 2012-08-12T16:57:42.360 に答える