2010-12-01 3 views
8

アップルのEADemoをベースに、私はEAAccessoriesに対するバックグラウンドの影響を理解しようとしています。バックグラウンド中のEAAccessory/EASessionティアダウン

私はconnectNotificationを受け取ると、アクセサリを取得し、プロトコルをチェックしてストリームを取得します。ストリームで私はデリゲートを設定し、RunLoopでスケジュールを設定して開きます

現在、私がバックグラウンドに入ると、私はこのすべてを壊します。私はすべてのものを取り戻し、すべての物を解放する。

私はdidDisconnectでこのティアダウンも行います。

私がdidConnectを取得するとは限りません。私はconnectedAccessoryリストを歩き、適切なデバイスを確認します。

- = - = - = -

EAのデモは、セットアップし、私たちはバックグラウンド持続性があるかどうかを確認していないので、ビュー上のセッションを切断します。

EAデモコードは、デバイス自体が切断されていない限り、解体して元に戻ることを示唆しているようです。

しかし、セッションやデバイスは、iOSデバイスがスリープ状態になったり、アプリケーションをバックグラウンドに置いたときにデバイスがデータの受信を停止したり、データがストリームからポイントストリームがいっぱいになる。


質問:バックグラウンド化を使用する場合は、私が実際にdidDisconnect通知を取得しない限り、私はアクティブであるセッション/アクセサリを取り壊すべきではありません。これで、セッションとアクセサリーの構造(そしておそらくストリーム)はバックグラウンドで生き残るだろうと思いますか?

+0

これについて進捗しましたか?私も同様の問題に取り組んでいます。ありがとう。 – westsider

答えて

3

私がExternal Accessoryフレームワークで経験したことは、当初は堅牢性の面ではあまり設計されていなかったことです。 iOSの4.0までは、複数のアクセサリに接続しようとすると、このエラーメッセージをもたらすであろう:

Cannot use accessory. Only one accessory can be in use at a time. 

は、今ではアプリがバックグラウンドに行くとアクセサリーに何が起こるかに注目がされていないようです。アクセサリの切断時にEASessionインスタンスが解放されるという正しい動作が保証されています。しかし、私は、バックグラウンドに入っているアプリは、接続されていないアクセサリと見なされるとは思わない。あなたのアクセサリーの接続IDの値をログに記録するとあまり行くことはありません。ではなく、は、バックグラウンドに切り替えてフォアグラウンドに戻ったことに気付くでしょう。私は、EAAccessoryManagerがアクセサリの変更(接続/切断)を通知されない限り、接続されたEAAccessoryインスタンスのリストがリフレッシュされないと考えます。

私はEASessionインスタンスを分解して再作成しようとしていますが、これは失敗しました。私は今、バックグラウンド/フォアグラウンドの移行中にEASessionをそのまま残してみるつもりです。私の懸念事項は、私のアプリがEAAccessoryDidDisconnectNotificationとEAAccessoryDidConnectNotificationの通知をバックグラウンドで受け取らないということです。

+2

私の理解では、[Disc | C] onnect Notificationsは、バックグランドを制御する親ラッパープロセスによってキャッシュされました。我々は完全に同期しなくなる傾向があるため、EAAccMgrリストのクエリを完全に停止しました。我々は通知に全面的に依存しています。 –

+2

アプリがバックグラウンドを入力した直後にEAAccessoryDidDisconnectNotificationを取得しました。 – iter

関連する問題