manolazo
25/04/17, 22:44:53
Buenas.
Ya comente hace tiempo que una de mis app es de ubicación en la cual se envian los datos de coordenadas entre otras cosas a un servidor cada vez que se actualiza la localización.
Pues bien, después de haber actualizado un S7 a android 7.0 nougat resulta que cuando la app esta en segundo plano o bien se apaga la pantalla del movil , los datos pasados unos 4 minutos no se suben, es como si el movil entrase en modo reposo y pasase de enviar ningun dato. Una vez se enciende la pantalla vuelven a subirse sin problemas. Todo esto no pasa ni con MarshMallow ni con versiones anteriores.
Lo que tengo es un Fragment y los envio a través o bien de Retrofit o por VOlley.
Es curioso que cuando pongo el movil en modo debug para ver los errores , en este caso si funciona correctamente.
He logrado hacer captar el error que provoca esto en el onFailure de Retrofit:
override
public void onFailure(Call<Coordenadas_Json_Retrofit> call, Throwable t) {
// Log error here since request failed
String stackTrace = Log.getStackTraceString(t);
textoprueba4.setText(stackTrace);
}
y es este:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Abstrac tPlainSocketImpl.java:334)
at java.net.AbstractPlainSocketImpl.connectToAddress( AbstractPlainSocketImpl.java:196)
at java.net.AbstractPlainSocketImpl.connect(AbstractP lainSocketImpl.java:178)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.j ava:356)
at java.net.Socket.connect(Socket.java:586)
at okhttp3.internal.Platform$Android.connectSocket(Pl atform.java:211)
at okhttp3.internal.io.RealConnection.connectSocket(R ealConnection.java:140)
at okhttp3.internal.io.RealConnection.connect(RealCon nection.java:111)
at okhttp3.internal.http.StreamAllocation.findConnect ion(StreamAllocation.java:188)
at okhttp3.internal.http.StreamAllocation.findHealthy Connection(StreamAllocation.java:127)
at okhttp3.internal.http.StreamAllocation.newStream(S treamAllocation.java:97)
at okhttp3.internal.http.HttpEngine.connect(HttpEngin e.java:289)
at okhttp3.internal.http.HttpEngine.sendRequest(HttpE ngine.java:241)
at okhttp3.RealCall.getResponse(RealCall.java:240)
at okhttp3.RealCall$ApplicationInterceptorChain.proce ed(RealCall.java:198)
at okhttp3.RealCall.getResponseWithInterceptorChain(R ealCall.java:160)
at okhttp3.RealCall.access$100(RealCall.java:30)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:1 27)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.j ava:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Como se ve hay un timeout en la conexión .
He mirado todas las opciones del movil y en 7.0 hay una opción de ahorro de datos en segundo plano , pero lo tengo desactivado y puesta la app como excepción por si las moscas. No se si habrá otra opción aparte de esto que no haya visto!!.
Que puede cortar esto en Nougat?.
Ya comente hace tiempo que una de mis app es de ubicación en la cual se envian los datos de coordenadas entre otras cosas a un servidor cada vez que se actualiza la localización.
Pues bien, después de haber actualizado un S7 a android 7.0 nougat resulta que cuando la app esta en segundo plano o bien se apaga la pantalla del movil , los datos pasados unos 4 minutos no se suben, es como si el movil entrase en modo reposo y pasase de enviar ningun dato. Una vez se enciende la pantalla vuelven a subirse sin problemas. Todo esto no pasa ni con MarshMallow ni con versiones anteriores.
Lo que tengo es un Fragment y los envio a través o bien de Retrofit o por VOlley.
Es curioso que cuando pongo el movil en modo debug para ver los errores , en este caso si funciona correctamente.
He logrado hacer captar el error que provoca esto en el onFailure de Retrofit:
override
public void onFailure(Call<Coordenadas_Json_Retrofit> call, Throwable t) {
// Log error here since request failed
String stackTrace = Log.getStackTraceString(t);
textoprueba4.setText(stackTrace);
}
y es este:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Abstrac tPlainSocketImpl.java:334)
at java.net.AbstractPlainSocketImpl.connectToAddress( AbstractPlainSocketImpl.java:196)
at java.net.AbstractPlainSocketImpl.connect(AbstractP lainSocketImpl.java:178)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.j ava:356)
at java.net.Socket.connect(Socket.java:586)
at okhttp3.internal.Platform$Android.connectSocket(Pl atform.java:211)
at okhttp3.internal.io.RealConnection.connectSocket(R ealConnection.java:140)
at okhttp3.internal.io.RealConnection.connect(RealCon nection.java:111)
at okhttp3.internal.http.StreamAllocation.findConnect ion(StreamAllocation.java:188)
at okhttp3.internal.http.StreamAllocation.findHealthy Connection(StreamAllocation.java:127)
at okhttp3.internal.http.StreamAllocation.newStream(S treamAllocation.java:97)
at okhttp3.internal.http.HttpEngine.connect(HttpEngin e.java:289)
at okhttp3.internal.http.HttpEngine.sendRequest(HttpE ngine.java:241)
at okhttp3.RealCall.getResponse(RealCall.java:240)
at okhttp3.RealCall$ApplicationInterceptorChain.proce ed(RealCall.java:198)
at okhttp3.RealCall.getResponseWithInterceptorChain(R ealCall.java:160)
at okhttp3.RealCall.access$100(RealCall.java:30)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:1 27)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.j ava:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Como se ve hay un timeout en la conexión .
He mirado todas las opciones del movil y en 7.0 hay una opción de ahorro de datos en segundo plano , pero lo tengo desactivado y puesta la app como excepción por si las moscas. No se si habrá otra opción aparte de esto que no haya visto!!.
Que puede cortar esto en Nougat?.