onrestart () siendo llamado cuando se presiona el botón de retroceso, ¿alguna forma de evitar esto?

StackOverflow https://stackoverflow.com/questions/8390112

  •  28-10-2019
  •  | 
  •  

Pregunta

Mi aplicación llama a algunos servicios web cuando se inicia recientemente. También me gustaría llamar a estos servicios web si el usuario inicia la aplicación (que se estaba ejecutando en segundo plano) y se reanuda. He investigado todos los métodos disparados cuando se lanzan aplicaciones y cuando las actividades están enfocadas. onStart (), onresume (), onrestart () etc ....

Pensé que OnRestart sería una buena apuesta para hacer mis llamadas de servicio web y actualizar mi opinión, el problema es que si paso de la Actividad A (la que hace las llamadas) a la Actividad B y presione el botón Atrás, la Actividad A disparará a Restart () y llame a los servicios web. No quiero que esto suceda cada vez que vuelvo a mi pantalla principal de alguna actividad en mi aplicación. Solo quiero que se llamen los servicios si la actividad de mi aplicación A se enfoca desde el exterior. ¿Son otros eventos de los que debería tener en cuenta que podría ayudarme? Si presiono el botón de inicio y luego presiono el icono de mi aplicación, debería actualizar, pero no si hago clic en algo en mi pantalla principal, abriendo una nueva actividad y luego presione el botón Atrás.

Espero que la pregunta tenga sentido.

Gracias.

¿Fue útil?

Solución

De acuerdo con la Ciclo de vida de la actividad, onRestart será llamado antes onResume. Entonces, si realiza sus llamadas web onResume, se llamará cuando la actividad comience por primera vez y cada vez que se reanuda. onRestart Solo se llama cuando el usuario vuelve a esa actividad. Para que pueda tener un booleano en su actividad (por ejemplo, boolean isacTivityResting) que se establece en falso, luego se establece en verdadero en onRestart. Si es cierto cuando onResume es golpeado, entonces no hagas tus llamadas web.

Código de ejemplo:

public void onRestart() {
    isActivityRestarting = true;
}

public void onResume() {
    if (!isActivityRestarting) {
        executeWebCalls();
    }

    isActivityRestarting = false;
}

Otros consejos

Bien onCreate es tu mejor apuesta, pero con alguna advertencia. (La pantalla principal aquí es la pantalla que llama WebService)

  • Si el usuario presiona el botón Atrás en la pantalla principal, onCreate sera llamado.
  • Si el usuario presiona el botón Atrás en la otra pantalla y vuelve a la pantalla principal, onCreate No se llamará.
  • Si el usuario sale de la pantalla principal con el botón de inicio, y regresa presionando mucho el botón de inicio y eligiendo su aplicación, onCreate no se llama.

Hasta ahora todo bien, aquí está la captura.

  • Si el usuario presiona el botón de inicio para salir y luego va al icono del lanzador, el onCreate no se llama. Teóricamente, es un comportamiento consistente, pero puede parecer extraño ya que el usuario podría estar pensando que está lanzando una aplicación para comenzar a olvidar cómo él/ella salió inicialmente.

Para su ANS, OnCreate es el camino a seguir con leve controles.

Soln si usa onStart o onRestart:

Una verificación que puede hacer es almacenar la marca de tiempo en sus preferencias compartidas, que corresponde cuando llamó a los servicios web. Ahora, cuando el usuario sale (ya sea por la clave de casa o de regreso) y regrese, puede verificar la hora y compararlo con el tiempo almacenado. Si la diferencia es alta, solo haga la llamada al servicio web. Para hacer este trabajo tienes que usar onStart o onRestart.

Dado que este es un comportamiento normal (ver http://developer.android.com/reference/android/app/activity.html#activitylifecycle) Recomendaría no tratar de trabajar en contra, sino trabajar con los métodos de ciclo de vida.

Su aplicación se está enfocando desde el exterior, ya sea de esta otra actividad o de otra manera.

Quizás debería llamar a los servicios en onCreate?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top