2015-03-26 2 views
0

Я думал, что вся реставрация Bluetooth вещь работает (действующее как центральный), то я попробовал следующее:Ядро Bluetooth Восстановление синхронизации Выпуск

1 - Peripheral посылает один пакет Bluetooth каждый 1 второй
2 - В случайное время, я убиваю приложение (либо с помощью отладчика стоп, или другое приложение, чтобы съесть всю память)
3 - Проверьте, если восстановление произошло

Это работало около 80% времени и ошибки были, казалось бы, случайным образом.

Через два дня я был в состоянии достоверно воспроизвести проблему:

1 - Peripheral посылает два пакета 1000 мс обособленно
2 - Убить приложение программно (убийство (GETPID(), SIGKILL) некоторые дельта после первый пакет (100 мс, 200 мс ...), который является некоторой дельта перед следующим пакетом (900 мс, 800 мс)
| --PKT ------- 850 мс ------ УБИЙСТВО - 150 мс - PKT - |
3 - Второй пакет прибывает и разбухает приложение

Я обнаружил, что если время между завершением приложения и последующим прибытием пакета превышает примерно 150 мс, восстановление происходит, как и в 100% случаев.

Если время между завершением приложения и последующим прибытием пакета составляет менее 150 мс, если я открываю приложение вручную в течение 10 секунд, восстановление происходит в 100% случаев. Если я открою приложение вручную через более чем 10 секунд, это не приведет к восстановлению. Кроме того, как только приложение будет убито, я наблюдаю за символом bluetooth в строке состояния и через ровно 10 секунд соединение будет удалено.

Тестирование проходило на iPhone 4s, работающем 8.1, а затем в 8.2.

Это похоже на ошибку ... Я могу предоставить свой код, если это поможет, но я отменил его до минимальных реализаций делегатов. Я попытался поставить центрального менеджера на другую очередь безрезультатно. Это реальная проблема для моего продукта, поскольку он основан на отслеживании синхронизации на основе сеансов. Есть предположения?

ответ

0

Это похоже на решение в iOS 9+

Смежные вопросы