Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Aplicación se reinicia al traerla a primer plano

Hola a todos de nuevo.
Los enanos del circo de Delphi siguen creciendo.
En la versión 6.0.1 de android, no basta con que TMemo se haya vuelto literalmente LOCO, según lo que vemos en este hilo.

(Perdón por no haber iniciado un nuevo hilo con este tema y haber usado otro ya abierto.)

Acabo de observar una nueva DESGRACIA? para los programas android generados con Delphi.

A ver si sé explicarme:
Los dispositivos Samsung (son los que yo utilizo) disponen de un botón que está por debajo de la pantalla y en el centro del dispositivo. Sirve para activar el terminal si se ha desactivado (apagado la pantalla) cuando llevas un tiempo sin usarlo. Esto está muy bien para prolongar la duración de la batería.

En otro hilo anterior, ya expliqué los problemas que habían surgido con la versión 6.0.1 de android.
Pues había cambiado la funcionalidad, tanto de este botón central como del sensor de dos rallitas dentro de un cuadrado que está a la izquierda de dicho botón.

Bueno, pues el nuevo INCONVENIENTE, que he observado consiste en esto:
En versiones anteriores y en ésta (6.0.1 que, acertadamente, le han puesto el nombre de Marshmallow. Y efectivamente es "mucho márs malou") (perdón por el chiste porque no tiene ninguna gracia) digo que en las versiones anteriores y en ésta cuando pulsas brevemente este botón central, ocultas el programa que estás utilizando, para poder hacer una llamada o cualquier otra cosa.

En versiones anteriores, cuando volvías a pulsar de nuevo este botón te aparecían en pantalla los programas que tenías abiertos. Si pulsabas brevemente sobre cualquiera, volvías a retomar el programa en la situación que lo dejaste (incluídos los generados por Delphi).

En la versión a la que no estamos refiriendo, si pulsas el botón central te aparece Google. Para que aparezcan los programas que estaban "minimizados" tienes que pulsar en el sensor a la izquierda del botón central, (que ahora se representa por dos rectángulos superpuestos, simulando lo que representa: ventanas en cascada).

Bueno, pues aparecen todos los programas que tienes minimizados en una cascada de ventanas.

Y aquí está el problema:

Si seleccionas cualquier aplicación que no haya sido generada con Delphi, la retomas donde la dejaste.

Pero si eliges una que ha sido generada por Delphi... ¡¡SORPRESA!! La aplicación se reinicia y arranca desde el principio, como si la hubieras llamado pulsando su icono.

Perdón por haberme alargado tanto, pero no sabía explicarlo mejor. Si aún no se entiende, lo siento.

Como siempre, solicito alguna ayuda (si es posible).

Gracias por leerme y saludos a todos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 24-07-2017 a las 19:35:24.
Responder Con Cita
  #2  
Antiguo 24-07-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Creo que lo que describes no es un problema de Delphi, sino que, se trata del comportamiento del sistema operativo, del "ciclo de vida" de las aplicaciones en Android. En efecto, cuando una aplicación se pone en segundo plano (pasamos a hacer otra cosa con otra aplicación), es el sistema el encargado de decidir si dicha aplicación va a cerrarse o mantenerse en segundo plano, etc. Dependiendo, supongo, de no pocas variables: necesidades de la aplicación, consumo de memoria RAM, batería restante, etc., etc.

Por ejemplo, en una aplicación que estoy desarrollando actualmente, usamos un componente "Websocket", que, permanece conectado a un determinado servidor. Pues bien, desde que usamos dicho componente, he podido notar que nuestra aplicación prácticamente no se "reinicia" como tú describes, sino que puede pasar de un segundo a un primer plano "sin más". Yo achaco este comportamiento a que Android sabe que ahí hay un Websocket abierto, y que, este debería permanecer conectado el mayor tiempo posible.

Sin embargo, hay veces que aún así la aplicación se comporta exactamente como describes, pero, como digo, no es algo anormal, sino el "ciclo de vida" de las aplicaciones de Android. En Delphi debe haber eventos como "OnBackground" y "OnResume", que, nos permitan mantenernos al tanto del ciclo de vida de la aplicación: saber si esta pasa a segundo plano, si vuelve a ponerse en primer plano, etc. Atendiendo a estos eventos podremos estar preparados para "resumir" en condiciones nuestra aplicación.

Es decir, no importa si esta se "reinicia", si nosotros sabemos que "venimos" de un "segundo plano", podemos antes (cuando pasamos a dicho segundo plano) haber guardado ciertos datos, por ejemplo, posbiles campos de un formulario ya rellenados, de modo que podamos situar al usuario en la vista o formulario de la aplicación que corresponda, e, incluso rellenar "los campos" del supuesto formulario, de modo que el usuario no pierda dicha información y todo "fluya" más o menos como se espera.

En conclusión: infórmate acerca del "ciclo de vida" de las aplicaciones de Android y de cómo manejar este tipo de situaciones usando Delphi: qué eventos podemos usar, etc.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Muchas gracias dec.
La verdad es que es un fastidio. Y esto ocurre en la versión 6.0.1 (tal vez también en las siguientes)

Tendré que investigar a ver si puedo evitarlo.

Se que Delphi tiene la posibilidad de hacerlo con el evento onSaveState, pero no lo he utilizado nunca y no sé como resultará.

Con el tema de los "ciclos de vida" también investigaré. Mientras tanto, si alguien lo tiene solucionado, agradecería cualquier ayuda.

El WhatsApp, por ejemplo, no se reinicia. Seguiré investigando.

Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #4  
Antiguo 24-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es lo que dice dec, es el "ciclo de vida" de los programas android. Es algo que debes controlarlo tú.




Responder Con Cita
  #5  
Antiguo 24-07-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Si no me equivoco, Whatsapp, utiliza un "servicio", o sea, no una aplicación "normal y corriente", para mantener la aplicación "activa". Pero tampoco estoy seguro de esto. Tal vez, por la propia característica de la aplicación, Android no la "termine" como puede terminar otras que considere oportuno. Como he dicho arriba, antes de usar un "Websocket" en cierta aplicación, yo notaba que los "reinicios" de esta eran mayores que después de usar dicho componente. Es como si Android supiese que hay un Websocket abierto (de hecho lo sabrá), de modo que, no es que garantize que la aplicación no se "cerrará", pero, digamos que no lo hace con la misma asiduidad que con otras aplicaciones. O sea, en todo caso es algo con lo que hay que convivir y tratar de lidiar con ello, dependiendo de las propias aplicaciones que se lleven a cabo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias, Casimiro;

Me han quedado algunas cosas claras:
1.- Que Android (antes no, ahora si) en las nuevas versiones, elimina las aplicaciones en segundo plano que (con sus criterios) no interesan a sus fines.

2.- Que no sabemos los criterios que utiliza para eliminarlas.

3.- Que debe haber una forma e evitarlo, que no conocemos.

4.- Que, tal y como dice dec, es posible que el componente "Websocket" esté incluído en sus criterios.

5.- Que la calculadora no se borra. Vamos conserva los datos después de volverla a primer plano.

6.- Que el programa reloj conserva también los datos.

7.- Otro ejemplo: he bajado de play store, para probar, un programa llamado Crucigramas que también conserva los datos.

Creo que de haber una forma de evitarlo y creo que no debe ser tan complicada como onSaveState.

Gracias por vuestro interés.

Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #7  
Antiguo 25-07-2017
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigo jhonalone algunas versiones de android tiene las opcion de aumentar el numero de aplicaciones que se puede tener en segundo plano verifica si tu terminal tiene esas opcionees

y para dec quisiera saber si el componente Websocket es un componente nativo o de tercero pues me llego la idea de incluirlo en las aplicaciones lo use o no ya que has dicho que las aplicaciones duran mas para cerrar
Responder Con Cita
  #8  
Antiguo 25-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces, para resumir:
Cita:
Empezado por jhonalone Ver Mensaje
Si seleccionas cualquier aplicación que no haya sido generada con Delphi, la retomas donde la dejaste.
Pero si eliges una que ha sido generada por Delphi... ¡¡SORPRESA!! La aplicación se reinicia y arranca desde el principio, como si la hubieras llamado pulsando su icono.
Es que eso no tiene nada que ver con delphi, eso es la forma de funcionamiento normal de todos los programas android.
Cuando "duermes" un programa y lo vuelves a "despertar" (lo que tú llamas "reiniciar") vuelve a empezar de nuevo, se pierden todos los valores en las variables, etc.
Y es exactamente el mismo comportamiento cuando giras la pantalla.

Ahora bien, todo eso es controlable, tú puedes saber si es la primera vez que inicia el programa o si es que está "despertando" tras haber "dormido" (o se ha girado la pantalla) y depende de ti controlarlo guardando los datos que necesites y volviendo a restaurarlos.

No sé cómo es el mecanismo ese en delphi porque para android utilizo otra cosa (no existía delphi para android cuando empecé a programar android), pero seguro que debe poderse hacer lo que necesitas, debe ser algo básico, aunque parezca complicado, como todo lo que no se conoce.

No puedo ayudar mucho en eso porque no tengo ningún delphi moderno, pero intentaré ayudarte en lo que pueda.
Responder Con Cita
  #9  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias por el interés que te estás tomando Casimiro.

Estoy convencido de que no es un problema sólo de Delphi. He comprobado que otros programas tienen el mismo comportamiento y no son de Delphi.

Al girar la pantalla no ocurre el mismo problema, al menos otros programas que he comprobado, aún siendo desarrollados en Delphi. Ni se resetean ni pierden la información de la pantalla.

Buenas noches. Mañana seguiremos.

Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #10  
Antiguo 27-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola a todos.

Sigo trabajando en el asunto.
Ayer minimizé algunas aplicaciones (entre ellas la mía) y para mi sorpresa esta mañana al reactivarlas mantenían sus misma pantalla y posición, es decir: no se reiniciaban (reseteaban).

No me preguntéis porqué... el dispositivo siegue siendo el mismo y yo no he cambiado ningún ajuste.

Estoy probando esta mañana y... unas veces se reinician las App's y... otras no. A ver si consigo averiguar el comportamiento (a primera vista errático) del "lifecycle" de las App's en Android.

Estoy haciendo pruebas con un controlador de eventos que me sugirió TOPX en otro hilo. Pero creo que aunque controlemos el evento, lo más difícil será restituir los valores que tienen en ése momento todas las variables globales de la App y restituir la pantalla en la que se encontraba cuando perdió el foco. Sin olvidarnos de las comprobaciones que hace el programa al ejecutarse la primera vez...

Sigo pensando, que "matar" las App's arbitrariamente, es una solución irrespetuosa con el usuario por parte de Android. No quiero decir con esto que no haya que controlar la memoria y el espacio del dispositivo por seguridad de uso. Pero estaréis conmigo en que, llegado a un límite de recursos, sería mucho mas elegante y respetuso avisar al usuario y dejarle elegir cuál o cuáles App's desea cerrar. Digo yo. De hecho, el sistema ya te avisa cuando te queda poca batería.

Imagínate que estás en un editor de texto y tienes una parte escrita y necesitas ponerlo en "segundo plano" para hacer una llamada. Como otras veces ya lo habías dejado en segundo plano y lo has recuperado intacto, vuelves a hacer lo mismo, sin guardarlo. Pero en ése momento Android decide "matar" la aplicación del editor. Cuando intentas recuperarlo, ves que se reinicia el editor, vuelve a su posición de cuando le ejecutas por primera vez, y has perdido el trabajo. Si, claro, aprendes a no volver a minimizarlo sin salvar. Pero te acuerdas del padre de Android (si tiene) y el mal ya está hecho.

Creo que todos sabéis, por experiencia que, los errores (problemas) que aparecen al desarrollar un programa y que ocurren unas veces sí y otras no, son los peores de resolver.

Si consigo descubrir o solucionar algo, o si se me ocurre otra cosa os tendré al corriente.

Perdonar mi pesadez, pero creo que el tema tiene bastante importancia (o...¿quizá sólo es importante para mi?...)

Bueno. Saludos a todos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #11  
Antiguo 27-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jhonalone Ver Mensaje
Imagínate que estás en un editor de texto y tienes una parte escrita y necesitas ponerlo en "segundo plano" para hacer una llamada. Como otras veces ya lo habías dejado en segundo plano y lo has recuperado intacto, vuelves a hacer lo mismo, sin guardarlo. Pero en ése momento Android decide "matar" la aplicación del editor. Cuando intentas recuperarlo, ves que se reinicia el editor, vuelve a su posición de cuando le ejecutas por primera vez, y has perdido el trabajo. Si, claro, aprendes a no volver a minimizarlo sin salvar. Pero te acuerdas del padre de Android (si tiene) y el mal ya está hecho.
Creo que todos sabéis, por experiencia que, los errores (problemas) que aparecen al desarrollar un programa y que ocurren unas veces sí y otras no, son los peores de resolver.
Si consigo descubrir o solucionar algo, o si se me ocurre otra cosa os tendré al corriente.
Perdonar mi pesadez, pero creo que el tema tiene bastante importancia (o...¿quizá sólo es importante para mi?...)
Bueno. Saludos a todos.
De toda la vida, con todos los sistemas, si no guardas lo que estás haciendo, te arriesgas a perderlo. No es nada nuevo ni "problema" exclusivo con android.
Cita:
Empezado por jhonalone Ver Mensaje
Perdonar mi pesadez, pero creo que el tema tiene bastante importancia (o...¿quizá sólo es importante para mi?...)
Creo, es mi opinión, que le estás dando demasiado importancia, a fin de cuentas es un teléfono con muuuuuchos añadidos, pero es un teléfono.
Puedes plantearte el problema de otra forma, por ejemplo, estás dando de alta un cliente y necesitas hacer una llamada, entonces cuando vas a salir (segundo plano, aparcar, dormir, llámalo como quieras) guardas los datos que se puedan perder y nada más, luego cuando inicias el programa de nuevo no habrás perdido nada, salvo que no estarás exactamente en la pantalla que estabas. No es nada trágico. Al menos, yo lo veo así.
Responder Con Cita
  #12  
Antiguo 27-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Puedes plantearte el problema de otra forma, por ejemplo, estás dando de alta un cliente y necesitas hacer una llamada, entonces cuando vas a salir (segundo plano, aparcar, dormir, llámalo como quieras) guardas los datos que se puedan perder y nada más, luego cuando inicias el programa de nuevo no habrás perdido nada, salvo que no estarás exactamente en la pantalla que estabas. No es nada trágico. Al menos, yo lo veo así.
Bueno... visto así... tengo que darte la razón.

Pero no es una bonita imagen para un usuario.

Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dejar una aplicación siempre en primer plano Kalikatres Desarrollo en Delphi para Android 19 28-11-2015 16:48:47
Buscar Aplicacion en Ejecucion y traerla al frente Enan0 Varios 0 29-09-2012 13:52:25
Aplicación en primer plano jordillussa Varios 4 20-03-2007 19:58:43
Ejecutar aplicacion externa y que este en primer plano Lorenzati API de Windows 11 06-07-2004 18:22:10
Aplicación siempre en primer plano Novás Varios 2 08-03-2004 09:31:09


La franja horaria es GMT +2. Ahora son las 02:27:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi