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 Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
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: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
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.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
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: 27.968
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: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
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.davidesperalta.com
Responder Con Cita
  #6  
Antiguo 24-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
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.051
Poder: 12
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 dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola a todos,

Cita:
Empezado por jhonalone Ver Mensaje
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.
Hombre, no es tanto que no interese a los fines de Android: lo que el sistema operativo hace es tratar de optimizar, entre otras cosas, el uso de la batería. Debe haber otras razones (optimizar el uso del procesador, "sensores", etc.) pero la batería es una de las más importantes: aplicaciones que estuviesen siempre activas consumirían recursos acaso innecesarios. Lo que el sistema trata de determinar es qué aplicación requiere permanecer activa, por cuánto tiempo, etc., etc.

Cita:
Empezado por jhonalone Ver Mensaje
2.- Que no sabemos los criterios que utiliza para eliminarlas.
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í.

Cita:
Empezado por jhonalone Ver Mensaje
3.- Que debe haber una forma e evitarlo, que no conocemos.
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:
Empezado por jhonalone Ver Mensaje
4.- Que, tal y como dice dec, es posible que el componente "Websocket" esté incluído en sus criterios.
No es tanto el componente Websocket, sino la conexión que se establece a través de dicho componente. Tengo que decir que yo hablo de una aplicación en la que no uso Delphi... de modo que lo del Websocket lo dije a modo de ejemplo. En efecto, este componente permite establecer, y, más importante para lo que nos ocupa, mantener una conexión abierta con un servidor. En efecto, esto puede "descubrirse", el sistema lo sabe, y, por lo tanto da un poco más de coba a nuestra aplicación, por decirlo así.

Cita:
Empezado por jhonalone Ver Mensaje
5.- Que la calculadora no se borra. Vamos conserva los datos después de volverla a primer plano.
Puede que los recupere: esto se puede hacer de forma transparente al usuario. No sé exactamente en el caso de la calculadora, pero, después de que nuestra aplicación se "reinicie" podemos llevar al usuario a la vista o formulario en que estuviese antes, rellener los datos de un posible formulario, etc. Todo transparente para el usuario.

Cita:
Empezado por jhonalone Ver Mensaje
6.- Que el programa reloj conserva también los datos.
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:
Empezado por jhonalone Ver Mensaje
7.- Otro ejemplo: he bajado de play store, para probar, un programa llamado Crucigramas que también conserva los datos.
Si hablamos de un programa de terceros y este conserva sus datos, podemos estar seguros de que el autor de dicha aplicación recupera dichos datos y los vuelve a mostrar. Insisto una vez más: no se trata de evitar que nuestra aplicación no se reinicie o no se ponga en segundo plano: esto es contraproducente para el mismo usuario y la batería del dispositivo, sin ir más lejos, se trata de adaptarse a lo que en Android se llama "el ciclo de vida" de las aplicaciones. No evitarlo, sino trabajar con ello.

Cita:
Empezado por jhonalone Ver Mensaje
Creo que de haber una forma de evitarlo y creo que no debe ser tan complicada como onSaveState.
Es que si pretendes guardar TODO el estado de tu aplicación... en efecto, tal vez sea una tarea que aparece a bote pronto complicada. Pero no es tanto lo que hay que guardar, estoy seguro. O no se trata de guardarlo todo... a no ser que la aplicación en cuestión lo requiera, cosa que sería "rara" y particular de dicha aplicación en todo caso.

Cita:
Empezado por kurono Ver Mensaje
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
Como le he comentado al compañero arriba, hablo de una aplicación que no se desarrolla con Delphi, pero, el concepto sería el mismo: si abrimos y mantenemos abierta una conexión con un servidor, según mi experiencia (y nada más, ojo...) Android "respeta" un poco más la aplicación, justamente, porque hay una conexión establecida con el servidor: que no es algo que desde luego todas las aplicaciones necesiten.
__________________
David Esperalta
www.davidesperalta.com

Última edición por dec fecha: 25-07-2017 a las 12:00:34.
Responder Con Cita
  #9  
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: 27.968
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #10  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Gracias a todos por vuestro interés, vuestro tiempo y vuestro esfuerzo.

Después de buscar y rebuscar, trastear y trastear con el móvil parece que la solución es bastante sencilla.

Se trata de desactivar la opción de "No mantener actividades", tal y como puede verse en la imagen adjunta.

Espero os sirva a todos.

Saludos a todos.
Imágenes Adjuntas
Tipo de Archivo: jpg AppKeep.jpg (30,7 KB, 8 visitas)
__________________
"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 25-07-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola a todos,

Cita:
Empezado por jhonalone Ver Mensaje
Gracias a todos por vuestro interés, vuestro tiempo y vuestro esfuerzo.

Después de buscar y rebuscar, trastear y trastear con el móvil parece que la solución es bastante sencilla.

Se trata de desactivar la opción de "No mantener actividades", tal y como puede verse en la imagen adjunta.

Espero os sirva a todos.

Saludos a todos.
Pero esa es una "opción de desarrollador": normalmente, los usuarios no tendrán dichas opciones disponibles, ni nosotros deberíamos contar conque las tuviesen acaso.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #12  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Bueno, dec, siempre será mejor algo que nada.

Como mucho se le puede pedir al usuario que la active.

Ah! por cierto, es una solución parcial, pues estoy comprobando, que cuando recuperas la App al poco tiempo, la mantiene intacta, pero (y esto lo sospecho, no estoy seguro) cuando pasa el tiempo seleccionado para la desactivación de la pantalla sigue "matando" la App y cuando intentas recuperarla, se reinicia.

¡Y yo que pensaba que había resuelto el problema...!

Seguiremos investigando....

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
  #13  
Antiguo 25-07-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola a todos,

Cita:
Empezado por jhonalone Ver Mensaje
Bueno, dec, siempre será mejor algo que nada.

Como mucho se le puede pedir al usuario que la active.
Pero si es que el tema está en que tú no deberías preocuparte por eso. Primero porque tendrías que pedir al usuario no ya que active una opción, pero, que active las opciones de desarrollador, para poder activar dicha opción. Pero es que no se trata de eso en absoluto.

Cita:
Empezado por jhonalone Ver Mensaje

Ah! por cierto, es una solución parcial, pues estoy comprobando, que cuando recuperas la App al poco tiempo, la mantiene intacta, pero (y esto lo sospecho, no estoy seguro) cuando pasa el tiempo seleccionado para la desactivación de la pantalla sigue "matando" la App y cuando intentas recuperarla, se reinicia.
Justamente, estás comprobando el buen comportamiento del sistema. El sistema da un "tiempo de gracia" a tu aplicación, de modo que, si vuelves a ella en poco tiempo, en efecto, no se ha reiniciado. Es precisamente, cuando pasa más tiempo, cuando el sistema decide que tu aplicación ha dejado de usarse por el usuario, que está en otras cosas... y que puede terminarla, para ahorrar recursos.

En definitiva, que no estamos ante un problema que haya que solucionar, sino ante cómo Android trata a las aplicaciones, no sólo la tuya, de modo que tenemos que adaptarnos a ese trato.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #14  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Sé estás haciendo un gran esfuerzo, David.

El "tiempo de gracia" al que te refieres, sólo existe haciendo el cambio propuesto en modo desarrollador, si no haces este cambio, no hay "tiempo de gracia" que valga.

Mira, el programa en cuestión consiste en en una agenda para usuarios autónomos donde se gestiona desde el aviso del cliente hasta la emisión de la factura. Como cualquier programa que se precie, tendrá unas cuantas variables globales, para no estar repitiendo en cada Unit, y porque son utilizadas y modificadas por otras units.

Creo que no será el único programa que se haya "cargado" Android al optimizar el uso de los nuevos terminales, que, por cierto, tienen menos necesidad de recursos que los antiguos, pues disponen de bastante más memoria y almacenamiento que los anteriores. (Repito en los anteriores no pasaba esto)

Esta optimización, la entendería más en los antiguos terminales que en los nuevos.

En cualquier caso, "matar las aplicaciones" sin permiso del usuario me parece una acto de una dictadura absolutista sin ningún respeto. Recordemos lo del cambio de función de los botones o el problema generado en TMemo con el texto predictivo y ¡quién sabe cuantas cosas más nos iremos encontrando...!

Cuanto más lo pienso más grave veo el alcance del problema.

Android es un caprichoso dictador, que lo menos que se le podría pedir al desarrollar cada nueva versión es que respetara la compatibilidad con las anteriores. Creo yo.

Bueno, que me salgo del tema, espero que alguien pueda ayudarme, (y creo que no soy el único que necesita, o va a necesitar, esta ayuda)

A ver si entre todos conseguimos minimizar los efectos de la dictadura (dura) de Android.

Seguiremos trabajando.

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: 25-07-2017 a las 14:35:01.
Responder Con Cita
  #15  
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: 27.968
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que estás confundido. Tanto ahora como antes, android cierra los programas que no se están utilizando dependiendo de las necesidades de memoria, recursos, el tiempo de inactividad, etc.
Lo que tú llamas "dictadura", realmente son las normas del funcionamiento de android, es como si dices que hay que acabar con la dictadura de eventos en windows, pero ¡¡¡windows es programación por eventos!!!
En cuanto a tu programa, por lo que dices, es simple, como una agenda que es, guarda los datos en una base de datos y no se perderán.
Responder Con Cita
  #16  
Antiguo 25-07-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.604
Poder: 27
dec Va camino a la famadec Va camino a la fama
Hola a todos,

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que estás confundido. Tanto ahora como antes, android cierra los programas que no se están utilizando dependiendo de las necesidades de memoria, recursos, el tiempo de inactividad, etc.
Lo que tú llamas "dictadura", realmente son las normas del funcionamiento de android, es como si dices que hay que acabar con la dictadura de eventos en windows, pero ¡¡¡windows es programación por eventos!!!
En cuanto a tu programa, por lo que dices, es simple, como una agenda que es, guarda los datos en una base de datos y no se perderán.
Estoy de acuerdo con Casimiro. En el caso de una aplicación de tipo "agenda", digamos que habrá vistas o formularios desde los que poder añadir datos. Pues bien, sólo necesitarías guardar datos cuando se vaya a "background" si el usuario está en alguno de estos formularios, no en cualquier otro de la aplicación.

Supongamos que soy un usuario de tu aplicación y hago lo siguiente:
  1. Inicio la app
  2. Voy al listado de datos que me interese (formulario)
  3. Veo los datos, y, cambio de tu app a otra.

En el caso de arriba, no importará que tu aplicación se reinicie o no, puesto que a mí, como usuario, en nada me afecta. Podré dar de nuevo los mismos pasos sin necesidad de que hubieses guardado nada en los eventos "pause y resume".

Ahora supongamos este otro escenario:
  1. Inicio la app
  2. Voy a añadir un nuevo conctacto
  3. Estoy en ello, pero, me llaman por teléfono

En este caso, sí que deberías comprobar acaso que el usuario, en efecto, estaba en el formulario para añadir un nuevo contacto, y que, ya había empezado a escribir el nombre de dicho nuevo contacto. Pues bien, ahora sí, en el evento "pause", guardarías por ejemplo el nombre del formulario, así como los datos ya introducidos.

Cuando el usuario volviese de nuevo a la aplicación, esta comprobaría que lo hace desde un "reinicio" (esto ha de comprobarse de alguna forma, por ejemplo, guardando alguna "bandera" en algún sitio cuando la aplicación entra en "background"), y, si es así, buscaría en qué formulario se quedó el usuario y si hay algún dato ya escrito.

De modo que al usuario no le importaría si la aplicación se ha reiniciado o no, simplemente él ve que, cuando vuelve a la aplicación (terminó la llamada de teléfono) se encuentra en el formulario para añadir un contacto y se le muestra el nombre del nuevo contacto que escribió anteriormente, de modo que puede continuar con la tarea.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #17  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Hola, Casimiro.

Sabes que te admiro por tus conocimientos y tu labor desinteresada en el foro.

Pero por primera vez, creo, (y pese al respeto y admiración que te tengo), no estoy de acuerdo contigo.

Lo que me estás diciendo, contradice mi experiencia con los aparatos en que he probado. Tengo varios probados y, a partir de la versión 4.4.4 ocurre ésto. Yo pensaba que era la 6.0.1 que es la última que yo uso, (sustituyendo a la 4.1.2 que usaba antes), pero he decidido probarlo en unos cuantos más y he comprobado que empieza a fallar a partir de la 4.4.4. En la 4.4.2 todavía no "mata" la app.

Observo que la primera vez que he visto con dos cuadrados superpuestos en el sensor inferior izquierdo, ha sido en la 4.4.4, en cuya versión ya estaba cambiado el comportamiento de los botones que explicaba en otro hilo.

Esto pasa desde que quitaron vkMenu de este sensor izquierdo.

También he podido comprobar que (en las opciones de desarrollador), la opción de "No mantener Actividades" por defecto está deshabilitada hasta la versión 6.0.1, en que viene habilitada por defecto.

Esto es lo que empíricamente he podido observar.

Por otro lado, con respecto a lo que dice David:

Sí, podemos hacer todos los arreglos que se nos ocurran. Detectar en la pantalla que estaba y restituirla. Lo cual no deja de ser una labor bastante ardua.

En lo que respecta a mi programa, no es una "simple agenda" es algo más. Lo puedes bajar y probarlo desde Google Play. Se llama "RegiControl". Entonces comprenderás lo que significa devolverle al sitio de interrupción. (Creo que tiene 12 o 14 unidades más un TWebBrowser para la ayuda en línea)

Por los datos no tengo problema, pues se van salvando al tiempo que se van tecleando.

Pero como lleva datos personales, al entrar debes teclear una clave de acceso. Y no me dirás que no es una imagen nefasta, tener que teclearla cada vez que dejas el programa para hacer otra cosa.

Claro. Tu me dirás "no pongas clave". Pues te digo que hay que ponerla porque lleva datos muy personales (Nif, direecciones, trabajos realizados...). No es una "simple agenda", es un sistema completo de control de tareas, presupuestos, trabajos en curso y facturación.

Sigo manteniendo que los cambios de versión de Android son una falta de respeto a los programadores, al menos los de Delphi, que son los que yo conozco.

El programa es bastante complejo y la solución no la veo sencilla, (si es que la hay).

¡Ah...! Os recuerdo que ya tuve que poner un mensaje avisando al usuario de que el teclado predictivo puede fallar a partir de la versión 6.0.1 de Android. En este hilo, que está sin poderse resolver.

Gracias, de nuevo, por vuestro interés.

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)

Última edición por jhonalone fecha: 25-07-2017 a las 21:58:31.
Responder Con Cita
  #18  
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: 27.968
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
Cuando el usuario volviese de nuevo a la aplicación, esta comprobaría que lo hace desde un "reinicio" (esto ha de comprobarse de alguna forma, por ejemplo, guardando alguna "bandera" en algún sitio cuando la aplicación entra en "background"), y, si es así, buscaría en qué formulario se quedó el usuario y si hay algún dato ya escrito.
Tras "reiniciar" (activity resume), pasa después a "activity create", pero con la "variable global" firstime que ahora tendrá valor false.

Responder Con Cita
  #19  
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: 27.968
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jhonalone Ver Mensaje
Pero por primera vez, creo, ... no estoy de acuerdo contigo.
Haces bien, puedo estar equivocado
Cita:
Empezado por jhonalone Ver Mensaje
Lo que me estás diciendo, contradice mi experiencia con los aparatos en que he probado. Tengo varios probados y, a partir de la versión 4.4.4 ocurre ésto. Yo pensaba que era la 6.0.1 que es la última que yo uso, (sustituyendo a la 4.1.2 que usaba antes), pero he decidido probarlo en unos cuantos más y he comprobado que empieza a fallar a partir de la 4.4.4. En la 4.4.2 todavía no "mata" la app.
Observo que la primera vez que he visto con dos cuadrados superpuestos en el sensor inferior izquierdo, ha sido en la 4.4.4, en cuya versión ya estaba cambiado el comportamiento de los botones que explicaba en otro hilo.
A ver si es que no te estamos entendiendo bien los problemas que comentas. Por ejemplo, yo no tengo ni idea a qué te refieres con lo de "dos cuadrados superpuestos".
Por cierto, ese modo de funcionar ¿no serán funcionalidades instaladas por el fabricante de la marca de esos smartphones?
Responder Con Cita
  #20  
Antiguo 25-07-2017
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Hola Casimiro. Gracias otra vez.

Habrás podido comprobar que estaba escribiendo cuando me has respondido.

Ya me contarás cómo puedo implementar lo que me propones. Porque yo sólo... creo que no.

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 23:18:36.


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