4

私はソケットベースのクライアントサーバーアプリに取り組んでいます。

iOS 4、4.2.1、4.3.2などでiDeviceを実行しているユーザーがサーバーに接続しているときにロックボタンをクリックすると、接続は維持されます。

ただし、iOS 5を実行しているデバイスでロックボタンをクリックすると、接続がすぐに破棄され、ロック画面からアプリに戻ると、NSStreamEventErrorOccurredメソッドが呼び出されたときに呼び出されるNSAlertViewが表示されます。

私はいくつかのクライアントにアプリをテストしてもらいましたが、iOS 5を使用しているすべてのクライアントで、デバイス(iPod 2g、iPod 4g、iPhone 3GS、iPhone 4)に関係なく、まったく同じ問題が発生します。

iOS 5デバイスがロックを処理する方法に変更はありましたか?どうすればこれを修正できますか?

編集:

プロジェクトはXcode4(iOS 4 sdk)で開始され、現在Xcode4.2で使用されています。これが重要かどうかはわかりません。

4

2 に答える 2

1

コメントにあるように、iOS 5 には、ユーザーがデバイスをロックしたときにアプリケーションをバックグラウンドに送る新しい「機能」があり、これによりネットワーク アクティビティが効果的に停止されます。

beginBackgroundTaskWithExpirationHandler:ソケット アクセスが必要なコードのクリティカル セクションをマークするために使用します。これにより、アプリがバックグラウンドでしばらくの間、コードを実行できるようになります。終わったら電話するのを忘れないでくださいendBackgroundTask

于 2011-11-26T20:08:18.453 に答える
0

実際、iOS 5 では考えていません。デバイスをロックすると、アクティブなアプリケーションがバックグラウンド モードに送られ、非アクティブになるだけです。私はいくつかのテストを行いました。ネットワーク ダウンロードを開始し、アプリをバックグラウンドに送信すると、ネットワーク ソケットは強制終了されませんが、一時停止されます。10 秒以上待ってから (10 秒は、アプリがバックグラウンドで中断されるまでのデフォルトの延長時間と見なされます)、アプリをフォアグラウンドに戻すと、途中でネットワーク ダウンロードが再開されたことがわかります。デバイスをロックしてすぐにロックを解除すると、ソケットが切断されているため、ネットワーク エラーが発生します。これは、デバイスがロックされているときにiOS 5がアプリをバックグラウンドに送信するだけではないことを示しています。

于 2011-11-30T18:26:24.490 に答える