FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
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. |
#2
|
|||
|
|||
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) |
#3
|
||||
|
||||
Es lo que dice dec, es el "ciclo de vida" de los programas android. Es algo que debes controlarlo tú.
|
#4
|
||||
|
||||
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. |
#5
|
|||
|
|||
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) |
#6
|
||||
|
||||
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 |
#7
|
||||||
|
||||||
Hola a todos,
Cita:
Yo creo que esto debe estar documentado en algún lado. Si bien no todos los criterios pormenorizados, al menos un detalle de los mismos, así como indicaciones para los desarrolladores. Lamento no poder enlazar a ningún sitio ahora mismo, pero, creo yo que debe ser así. No se trata de evitarlo: es el "ciclo de vida" de las aplicaciones, es algo que se hace para mejorar la experiencia del usuario, para que la batería no dure "un suspiro", por ejemplo, sino que dure lo máximo posible. Por eso no se trata de evitarlo, sino de lidiar con ello, de tenerlo en cuenta. Por ejemplo, respondiendo a un mensaje tuyo en otro hilo, no es que debamos o sea menester guardar el estado de toda nuestra aplicación, y, después recuperar dicho estado "completamente". Esto, seguramente, no tiene sentido. Más bien hemos de ponernos en el caso de que un usuario esté rellenando algún formulario de nuestra aplicación, y, de repente, pase a otra aplicación, por ejemplo, porque le llaman por teléfono. Lo que acaso debemos guardar nosotros (si lo consideramos necesario, y, por favorecer al usuario) son los datos del formulario en cuestión, lo que ya hubiese escrito el usuario, de modo que, cuando vuelva a reactivar la aplicación, si es necesario (si se desactivó antes) volver a rellenar los datos del formulario, para que el usuario no tenga que escribirlos de nuevo. Pero no se trata de guardar más allá de eso... claro que dependerá de la aplicación, pero, lo que quiero decir es que no se trata de guardar "todo" lo de nuestra aplicación, para recuperarlo después. Nuestra aplicación tendrá un "ciclo de vida", que debemos controlar, pero, no hay que llegar a esos extremos. Un juego, por ejemplo, podrá guardar la partida en curso, si se quiere, pero, no necesitará ir más allá... podrá dar al usuario la opción de lanzar de nuevo la partida "cortada", o bien hacerlo de forma automática, pero, no tiene porqué haber guardado nada más que eso. Cita:
Cita:
Tampoco sé muy bien si estas aplicaciones que acompañan al sistema operativo tienen ya algún tipo de "prioridad" especial, o, tal vez, acaso, que su "reinicio" no sea exactamente igual que en el caso de las aplicaciones Delphi, es decir, que, aunque se reinicien, el proceso es aún más transparente: no se muestra una posible "splash screen" de nuevo, etc. De modo que a nosotros nos parece que estas aplicaciones están funcionando en "background", pero, en realidad no sea así. Por ejemplo, en el caso de la aplicación que desarrollo, los "reinicios" son bastante claros: porque se muestra una "splash screen". Pero esto es algo que tiene que ver con esta aplicación en concreto y con el entorno de desarrollo empleado, etc. Tal vez la calculadora y el reloj se reinicien igualmente, pero, "no se note", como si mostrasen un "splash screen" cada vez que se inician "desde cero". Cita:
Cita:
Cita:
Última edición por dec fecha: 25-07-2017 a las 12:00:34. |
#8
|
||||
|
||||
Tal y como dice dec, y el dibujito que he puesto antes, el ciclo de vida de una aplicación android NO es como una de windows. Cuando sales del programa (o se "duerme") debes programar lo que necesites en los "eventos" activity_pause y activity_resume.
|
|
|
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 |
|