Conexões próximas 2.0: Conexão bem-sucedida, seguida imediatamente por desconexão

Estou tentando usar o Near Connections 2.0 com oP2P_CLUSTER estratégia de conexão e estou tendo problemas para conectar meus dispositivos e permanecer conectados. De acordo com meus logs de rastreamento, parece que os dispositivos estão se conectando com sucesso e sendo desconectados instantaneamente.

Observe que às vezes também é executado com o mesmo código com êxito e permanece conectado. Não sei o que faz com que às vezes funcione e falhe outras vezes, e não sei por que os nós estão sendo desconectados automaticamente. No entanto, tenho certeza de que a "desconexão" não está sendo emitida no meu código. Está vindo de algo em um nível inferior.

Aqui está a sequência de eventos que estou vendo no momento:

descobrimos outro nó (ou seja, pressionamos o retorno de chamada onEndpointFound) e emitimos requestConnectionnós acessamos onConnectionInitiated para esse ponto de extremidade. (Verificando info.isIncomingConnection () aqui, não parece importar se essa foi uma resposta à nossa própria solicitação ou se foi iniciada em outro lugar.)emitimos acceptConnection (e movemos nosso status para PENDING)atingimos onConnectionResult com o status "sucesso". Tudo está bom (e os dois lados brevemente pensam que estão conectados).imediatamente depois, acessamos onDisconnected (e os dois lados passam para o status desconhecido)Atualização: atraso de 200 ms adicionado antes de acceptConnection

Essa foi uma grande melhoria, e os dispositivos quase sempre estabelecem uma conexão bem-sucedida (e duradoura) agora. No entanto, às vezes são necessárias 2-3 tentativas.

Por exemplo, eis o que aconteceu ao executar um caso de teste simples (com um dispositivo de publicidade e um dispositivo de descoberta e sem fatores complicadores). Do ponto de vista do Discoverer, era assim:

nós batemosonEndpointFound erequestConnectionnós batemosonConnectionInitiated para a conexão que solicitamos e aceite-anós batemosonConnectionResult com conexão bem sucedida.logo em seguida, atingimosonDisconnectedparamos a descoberta, esperamos 3 segundos, reinicia a descobertapercorremos todos os itens acima uma segunda vez, sendo desconectados novamente

Mas, executando o processo de conexão pela terceira vez, obtivemos uma boa conexão persistente e pudemos enviar e receber dados de maneira confiável.

Atualização: exceção do lado do anunciante causando desconexão?

Eu peguei uma longa série dessas desconexões automáticas. Cada vez, o anunciante tinha essa exceção antes de ser desconectado.

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)

Isso ajuda a diagnosticar o problema?

questionAnswers(1)

yourAnswerToTheQuestion