Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

237
Visualizações
Extraño pedido de devoluciones de llamada del ciclo de vida al ingresar al modo de múltiples ventanas

Tengo un problema con el modo RxJava, Retrofit y Multi-Window... Estoy llamando a nuestra propia API con Retrofit dentro de una actividad (el código real es un poco más complejo que esto):

 api.getEvent(...) .subscribeOn(Schedulers.io()) .observeOn(AndroidScheduler.mainThread()) .subscribe(event -> setupUI(event), throwable -> showSnackbar(throwable));

Cuando la aplicación está en modo "normal" (pantalla completa), todo funciona bien... Puedo poner la aplicación en bg, ponerla de nuevo en primer plano y se vuelve a llamar al método de llamada api (se encuentra en el método onResume - tipo of) y la interfaz de usuario se dibuja sin problemas. Cuando activo el modo Multiventana, en cambio, se llama a onResume, se llama al método api con éxito pero nunca se alcanza el método subscribe(). El stacktrace para esta situación es:

 Retrofit: java.io.InterruptedIOException: thread interrupted at okio.Timeout.throwIfReached(Timeout.java:145) at okio.Okio$1.write(Okio.java:77) at okio.RealBufferedSink.flush(RealBufferedSink.java:221) at com.squareup.okhttp.internal.framed.Http2$Writer.flush(Http2.java:381) at com.squareup.okhttp.internal.framed.FramedConnection.newStream(FramedConnection.java:283) at com.squareup.okhttp.internal.framed.FramedConnection.newStream(FramedConnection.java:249) at com.squareup.okhttp.internal.http.Http2xStream.writeRequestHeaders(Http2xStream.java:135) at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:710) at com.facebook.stetho.okhttp.StethoInterceptor.intercept(StethoInterceptor.java:67) at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:695) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:576) at com.squareup.okhttp.Call.getResponse(Call.java:287) at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:243) at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205) at com.squareup.okhttp.Call.execute(Call.java:80) at com.newrelic.agent.android.instrumentation.okhttp2.CallExtension.execute(CallExtension.java:43) at retrofit.client.OkClient.execute(OkClient.java:53) at com.newrelic.agent.android.instrumentation.retrofit.ClientExtension.execute(ClientExtension.java:42) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$1.invoke(RestAdapter.java:265) at retrofit.RxSupport$2.run(RxSupport.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:761)

La aplicación no falla, pero la interfaz de usuario permanece en un estado de "marcador de posición" y la barra de progreso de carga continúa para siempre.

EDITAR: tengo la misma estructura de código en otras actividades. Sin embargo, el problema no aparece en ningún otro lugar.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Hay una secuencia un poco extraña de devoluciones de llamadas del ciclo de vida cuando una aplicación entra en el modo de ventanas múltiples. Inicié sesión onStart , onResume , onPause y onStop . Ver resultados:

ingrese la descripción de la imagen aquí

 pause stop start resume pause

Entonces, la primera aplicación abierta inicialmente pierde el foco, luego gana el foco y luego vuelve a perder el foco (el foco va a la siguiente ventana).

Creo que está cancelando su suscripción en onPause , porque inició la suscripción en onResume . Y es por eso que subscribe() nunca se llama, porque se cancela la suscripción de inmediato.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda