8

Apple の EADemo をベースとして使用して、EAAccessories に対するバックグラウンド処理の影響を理解しようとしています。

connectNotification を受信すると、アクセサリを取得し、プロトコルを確認してストリームを取得します。ストリームを使用してデリゲートを設定し、RunLoop でスケジュールを設定して、開く

現在、バックグラウンドに入ると、これをすべて破棄します。行ったことをすべて取り消し、すべてのオブジェクトを解放します。

私はまた、didDisconnect でこの分解を行います。

入力時に常に didConnect を取得できるとは限らないため、connectedAccessory リストを調べて、適切なデバイスを確認します。

-=-=-=-

EA デモは、ビューでセッションをセットアップおよび破棄するため、バックグラウンドの永続性があるかどうかはわかりません。

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

ただし、セッションとデバイスは、iOS デバイスがスリープ状態になるか、アプリをバックグラウンドにすると、デバイスがデータの確認を停止するか、さらに悪いことに、ストリームがいっぱいになるまでデータをストリームから引き出すのを停止する状態になることがあります。上。


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

4

1 に答える 1

3

外部アクセサリ フレームワークに関する私の経験では、堅牢性の点で、当初の設計が不十分でした。iOS 4.0 までは、複数のアクセサリに接続しようとすると、次のエラー メッセージが表示されました。

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

アプリがバックグラウンドに入ったときにアクセサリがどうなるかについては、あまり注目されていないようです。私は、EASession インスタンスがアクセサリの切断時に解放されるのが正しい動作であることを確信しています。しかし、アプリがバックグラウンドに移行したからといって、アクセサリが切断されたわけではないと思います。アクセサリの connectedID の値をログに記録する場合、多くのことを行う必要はありませ。バックグラウンドに切り替えてフォアグラウンドに戻しただけでは変更されないことがわかります。EAAccessoryManager にアクセサリの変更 (接続/切断) が通知されない限り、接続されている EAAccessory インスタンスのリストが更新されないのではないかと思います。

EASession インスタンスを破棄して再作成しようとしましたが、失敗しました。バックグラウンド/フォアグラウンド移行の間、EASession をそのままにしておくことにします。私の 1 つの懸念は、アプリがバックグラウンドで EAAccessoryDidDisconnectNotification および EAAccessoryDidConnectNotification 通知を受信しないことです。

于 2010-12-10T17:01:30.683 に答える