WRT разъединения: я только наблюдал сторону первооткрывателя этого неудачного рукопожатия и не видел никаких исключений в журнале. Будут ли упомянутые исключения на стороне рекламодателя? Могу ли я что-нибудь сделать, чтобы сгладить процесс, кроме установки бета-версии Google Play?

аюсь использовать Nearby Connections 2.0 сP2P_CLUSTER Стратегия подключения, и у меня возникают проблемы с подключением устройств и сохранением связи. Согласно моим журналам трассировки, похоже, что устройства успешно подключаются, а затем мгновенно отключаются.

Обратите внимание, что он также иногда успешно проходит через тот же код, а затем остается подключенным. Я не знаю, что заставляет это работать иногда и терпеть неудачу другие времена, и я не знаю, почему узлы автоматически отключаются. Тем не менее, я уверен, что «отключение» не выдается в моем коде. Это происходит от чего-то на более низком уровне.

Вот последовательность событий, которые я сейчас наблюдаю:

мы обнаруживаем другой узел (т. е. выполняем обратный вызов onEndpointFound), а затем выдаем requestConnectionмы нажали onConnectionInitiated для этой конечной точки. (Проверяя здесь info.isIncomingConnection (), не имеет значения, был ли это ответ на наш собственный запрос или запрос, инициированный в другом месте.)мы выдаем acceptConnection (и переводим наш статус в ОЖИДАНИЕ)мы ударяем onConnectionResult со статусом «успех». Все хорошо (и обе стороны кратко думают, что они связаны).сразу после этого мы нажимаем на Disconnected (и обе стороны переходят в неизвестный статус)Обновление: добавлена ​​задержка 200 мс перед acceptConnection

Это было большим улучшением, и устройства почти всегда устанавливают успешное (и длительное) соединение сейчас. Однако иногда требуется 2-3 попытки.

Например, вот что произошло при запуске простого тестового примера (с одним рекламным устройством и одним устройством обнаружения, без осложняющих факторов). С точки зрения Первооткрывателя это выглядело так:

мы попалиonEndpointFound а такжеrequestConnectionмы попалиonConnectionInitiated за соединение, которое мы просили, и принять егомы попалиonConnectionResult с успешным подключением.очень скоро после этого мы ударилиonDisconnectedмы останавливаем обнаружение, ждем 3 секунды, возобновляем обнаружениемы повторяем все вышеперечисленное во второй раз, снова отключаясь

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

Обновление: исключение на стороне рекламодателя, вызывающее отключение?

Я поймал длинную серию этих автоотключений. Каждый раз рекламодатель имел это исключение как раз перед тем, как их отключили.

10-09 19:17:26.365 29232-29232/? E/SearchServiceStarter: Task 174 failed or timed out. Client 128565203126930423 disconnecting from SearchService!
                                                     java.util.concurrent.CancellationException: Task was cancelled.
                                                         at com.google.common.util.concurrent.d.cp(SourceFile:75)
                                                         at com.google.common.util.concurrent.d.get(SourceFile:57)
                                                         at com.google.common.util.concurrent.cj.n(SourceFile:2)
                                                         at com.google.common.util.concurrent.ay.l(SourceFile:50)
                                                         at com.google.common.util.concurrent.ba.run(SourceFile:5)
                                                         at com.google.android.apps.gsa.shared.util.concurrent.a.bc.run(SourceFile:2)
                                                         at android.os.Handler.handleCallback(Handler.java:808)
                                                         at android.os.Handler.dispatchMessage(Handler.java:103)
                                                         at android.os.Looper.loop(Looper.java:193)
                                                         at android.app.ActivityThread.main(ActivityThread.java:5299)
                                                         at java.lang.reflect.Method.invokeNative(Native Method)
                                                         at java.lang.reflect.Method.invoke(Method.java:515)
                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:831)
                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647)
                                                         at dalvik.system.NativeStart.main(Native Method)

Помогает ли это вам диагностировать проблему?

Ответы на вопрос(1)

Решение Вопроса

в следующем выпуске. В качестве временного исправления задержите ваше принимающее соединение на небольшую сумму (~ 100 мс?).

Изменить: это должно быть исправлено с Google Play Services 11.6.0

 Xlythe06 окт. 2017 г., 02:32
Я рад, что задержка помогла! Что касается нескольких оставшихся отключений, проверьте logcat на наличие ошибок. Должно быть одно непротиворечивое исключение «не удалось разобрать», в котором условие расы указывается как причина разъединения. Если вместо этого вы видите другие исключения, дайте мне знать :) Кстати, у нас есть бета-программа, в которой вы можете получить последнее обновление Play Services (со всеми исправлениями) до его публичного выпуска. Если вам интересно, мне просто нужен адрес Gmail, привязанный к телефону. (Есть ли у StackOverflow система PM?)
 Rapunzel Van Winkle06 окт. 2017 г., 04:06
WRT разъединения: я только наблюдал сторону первооткрывателя этого неудачного рукопожатия и не видел никаких исключений в журнале. Будут ли упомянутые исключения на стороне рекламодателя? Могу ли я что-нибудь сделать, чтобы сгладить процесс, кроме установки бета-версии Google Play?
 Xlythe04 окт. 2017 г., 23:24
Если вы все еще видите это, да, более длительная задержка должна помочь.
 Rapunzel Van Winkle05 окт. 2017 г., 06:58
Увеличена задержка до 200мс. Смотрите обновленный пост для более подробной информации.
 Rapunzel Van Winkle04 окт. 2017 г., 03:03
Автоотключения, кажется, происходят гораздо реже (и восстанавливаются лучше при повторной попытке) с задержкой в ​​100 мс, но иногда они все же случаются. Должен ли я попробовать более длительную задержку? Или может быть какая-то другая проблема?

Ваш ответ на вопрос