EAAccessory/EASession разрыв во время фона

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

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

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

Я также делаю это демонтаж на didDisconnect.

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

- = - = - = -

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

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

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


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

1 ответ

Мой опыт работы с платформой 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 в фоновом режиме.

Другие вопросы по тегам