EAAccessory / EASession разрыв во время фона - PullRequest
8 голосов
/ 01 декабря 2010

Используя EADemo от Apple в качестве базы, я пытаюсь понять влияние фоновой обработки на EAAccessories.

Когда я получаю уведомление connectNotification, я получаю аксессуар, проверяю протокол и получаю потоки. С потоками я устанавливаю делегата, планирую на RunLoop и открываю

В настоящее время, когда я выхожу на задний план, я все это разрушаю. Я отменяю все, что я сделал, и освобождаю все объекты.

Я также делаю этот разрыв на didDisconnect.

При входе я не всегда получаю didConnect, поэтому просматриваю список подключенных аксессуаров и проверяю соответствующие устройства.

- = - = - = -

Демонстрация EA устанавливает и разбирает сеансы на представлении, поэтому мы не видим, сохраняется ли фоновая стойкость.

Демонстрационный код EA, по-видимому, предполагает, что вы можете разорвать и вернуться обратно, пока само устройство не отключилось.

Сеанс и устройство, однако, иногда, кажется, приходят в состояние, когда устройство iOS спит или переводит приложение в фоновый режим, и устройство перестает подтверждать данные, или, что еще хуже, прекращает вытягивать данные из потока до такой степени, что поток наполняется.


Вопрос. При использовании фоновой обработки не следует ли отключать активную сессию / аксессуар, если я не получаю уведомление didDisconnect. При этом я предполагаю, что структуры Session и Accessory (и, возможно, потоки) выживут в фоновом режиме?

1 Ответ

3 голосов
/ 10 декабря 2010

Мой опыт работы с платформой External Accessory заключается в том, что изначально она была плохо спроектирована с точки зрения надежности.До iOS 4.0 попытка подключения к нескольким аксессуарам приводила к появлению этого сообщения об ошибке:

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

Теперь кажется, что не было большого внимания к тому, что происходит с аксессуарами, когда приложения уходят в фоновый режим.Я был уверен, что правильное поведение для экземпляров EASession будет выпущено при отключении аксессуара.Но я не думаю, что приложение, уходящее в фоновый режим, квалифицируется как отключение аксессуара.Не так много, чтобы пройти мимо, если вы зарегистрируете значение подключенного идентификатора для ваших аксессуаров, вы заметите, что они не меняются только для переключения на фон и обратно на передний план.Я подозреваю, что список подключенных экземпляров EAAccessory не обновляется, пока EAAccessoryManager не получит уведомление об изменении (подключении / отключении) аксессуара.

Я пытался разорвать и воссоздать экземпляры EASession, и это не удалось.Сейчас я попытаюсь оставить EASession на месте на всем протяжении перехода между фоном и передним планом.Меня беспокоит то, что мое приложение не будет получать уведомления EAAccessoryDidDisconnectNotification и EAAccessoryDidConnectNotification в фоновом режиме.

...