Spanish Background / Resume

Espinosa4

Active Member
Licensed User
Longtime User
Hola a todos,

No sé cual ha sido el motivo (quizá la actualización versión 2.71) pero antes al pulsar el motón de home (el del centro del móvil) la aplicación se me quedaba en background pero luego cuando le daba al acceso directo salía directamente en el lugar en el que me había quedado. Tuve algunos problemas con una librería. Concretamente la scrollview2d porque al "minimizar" y luego volver a llevar al frente la aplicación varias veces al final android me devolvía un error de que el objeto x no existía. Ahora, mi última compilación, cuando "minimizo" y vuelvo a traer al frente la aplicación aparece como si se hubiera inicializado. Leyendo por ahí creo que he entendido que esto es lo normal y es cuando se ejecuta el código que hay en resume y si no hay nada se inicia la app.

Bueno, si esto es así... cómo puedo salvar la posición? Donde me había quedado resulta que es el resultado de pasar por 3 activies. Tengo que memorizar todas las variables, para ejecutar todo otra vez sin la intervención del usuario?


Gracias a todos por vuestra grandísima ayuda.
Saludos
Espinosa
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Es dificil responder sin conocer mas a fondo tu problema, pero esta claro que si quieres memorizar datos y sobre todo de otros Activity, tendras que guardarlos en variables globales. Create tambien una para saber si sales y vuelves a entrar en el programa y asi podras actuar en consecuencia.

Saludos:

Jesús
 

vampirbcn

Active Member
Licensed User
Longtime User
Espinosa,

Tienes dos opciones:

a) la que te ha comentado bgsoft de memorizar posiciones y cuando vuelvas a la aplicación restaurar todos los valores.
b) Crear un servicio y dejarlo activo, de esta forma Android no descargará la aplicación de la memoria y al volver todo estará tal cual. (NO VALIDA Ver post #6)

Saludos
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Perdona que te contradiga algo Vampirbcn, si creas un servicio, al entrar de nuevo en la aplicacion seguira teniendo los mismos problemas de los Activity (cómo puedo salvar la posición? Donde me había quedado resulta que es el resultado de pasar por 3 activies.), el servicio lo unico que conseguira es tener el servicio en marcha pero no la aplicacion, por otro lado tambien android para servicios que consumen muchos recursos (te lo digo por experiencia)

Saludos:

Jesus
 

vampirbcn

Active Member
Licensed User
Longtime User
Si lo que hace Espinosa4 es minimizar como comenta, al volver deberia guardarle los datos y la posición. (INCORRECTO Ver post #6)

ahh por cierto Espinosa4 mirate esto: StateManager, si como comenta Jesus no te guarda la posición, esta libreria te facilitará mucho el trabajo.

Lo del consumo de recursos es muy cierto y que Android para algunos servicios también es cierto, por desgracia yo también he tenido esa experiencia.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Vampirbcn:

Vuelvo a insistir , un servicio no te garantiza que los datos del programa se mantengan, un servicio lo unico que hace es como su nombre indica "crear un servicio", y hará el código que este dentro de ese servicio, esté o no en marcha la aplicación que lo llamó. Por tanto, da igual que crees un servicio o no para que al pulsar la tecla Home el programa quede en segundo plano, y si Android lo considera lo mate.

Puedes hacer una prueba muy facil para que veas que el servicio no vale para nada con respecto a tu parte b) de la solucion.
b) Crear un servicio y dejarlo activo, de esta forma Android no descargará la aplicación de la memoria y al volver todo estará tal cual.

Llamas al servicio y luego pulsas la tecla home (o menu) y asi queda el programa en segundo plano.
Mantener la tecla menu pulsada y pulsar el icono de la derecha para borrar las aplicaciones en segundo plano.
Si vas al administrador de aplicaciones (En ejecución), veras que el servicio está en marcha pero el programa no.
Y si vuelves a entrar en el programa hará todo lo que hace cuando entra la primera vez sin mantener los datos de cuando se "minimizo".
Con esto queda mas que demostrado que el servicio no hace que Android no descargue la aplicacion que llamó al servicio. La "gracia" de los servicios es esa, que aunque mates la aplicacion ellos sigan en marcha, y su utilidad no es al reves como tu dices en el apartado B)

Es importante entender cómo Android decide qué proceso matar cuando se tiene poca memoria.
Un proceso puede estar en uno de los tres estados siguientes:
- Primer plano - El usuario ve actualmente una de las actividades del proceso.
- Segundo Plano - Ninguna de las actividades del proceso son visibles, sin embargo hay un servicio iniciado.
- En pausa - No hay actividades visibles y sin servicios iniciados.

Los procesos en pausa son los primeros en ser matados cuando sea necesario. Si todavía no hay suficiente memoria, se mataron los procesos de fondo o segundo plano.
Por lo general no se puede matar procesos en primer plano.

Espero que con esto quede claro que un servicio no impide que se mate a la aplicacion que lo llamo si esta se encuentra en segundo plano.

Saludos:

Jesús
 

vampirbcn

Active Member
Licensed User
Longtime User
Hola Jesus,

He estado haciendo pruebas y el emulador me ha estado engañando: He realizado una mini app con varios layouts, activo un servicio al arrancar, entro en un segundo layout y minimizo la aplicación. Durante varias horas he estado ejecutando otras aplicaciones, y al volver a la aplicación me posicionaba en el layout de salida y conservaba los valorores, pero al final tras varias horas de funcionar correctamente, Android ha cerrado la aplicación y al volver me ha situado en la pantalla inicial y se han perdido los datos.

Por lo que, tal como has comentado, la opción de crear un servicio para que la aplicación guarde la posición y los datos de un activity no es valida, la única solución valida es la de guardar todos los datos y posición y recuperarlos al volver abrir la aplicación, ya sea con el StateManager o manualmente.

Saludos y gracias por la aclaración.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola VampirBcn:

Yo no empleo nunca el emulador para probar, lo cargo en un movil y asi es real su comportamiento.
Si hubieses probado lo que te dije de matar el programa hubieses visto sin esperar tanto lo que te habia dicho :D

El problema de todo esto es que quizas abria que crear un buen documento sobre B4A, donde ademas de explicar todo ponga ejemplos, algo que echo a faltar con respecto a otros lenguajes (Visual Basic por ejemplo), y que tuviese un buen indice, y un buen sistema de busqueda de lo que quieras, hay gente experta que ha realizado tutoriales estupendos, y entiendo que ha perdido mucho tiempo en hacerlo que nadie le ha pagado, y les estoy agradecido por esos aportes. Pero me falta algo tan simple como que todo este aglomerado en un documento de tipo ayuda de windows, donde cuando quieras saber por ejemplo tratamientos de string te diga todos los que hay y ademas dos lineas de ejemplo, y al entrar en uno de ellos te diga los que son similares. Y esto lo digo por que otro problema es que cuando tienes un error casi siempre te sale el tan querido "error java" que ni el mas listo sabe donde ocurrió a menos que sepa de java. Y si dispones de un documento con ejemplos simples, podriamos ver donde está nuestro error y evitar trabajo a todos los que estamos en este foro.
Ya se que algún experto me dira que si quiero saber de string o de otra cosa mire tal o cual documento, pero no seria mas facil no tener que averiguar donde se esconde ese documento e irme directo al Help de B4A?.
Se que existe el programa B4A HelpViewer y que te puede sacar de muchos apuros, pero por ejemplo, pide que te saque una lista de los métodos del RunMethod de la libreria Reflection, te dará mil resultados menos el que buscas, y si por ejemplo entras en:

RunMethod (method As String) As Object
Runs the specified method on the current target. Protected and private methods may be accessed if allowed by any security manager which may be present.


Ni un ejemplo, ni donde esta la lista de metodos, etc .

Estas palabras se que no van a gustar a muchos, pero esa es la realidad de los que aterrizamos en B4A y para resolver un pequeño problema nos pegamos toda una mañana, y si con suerte encontramos a alguien como tu u otros que le da la solución hay que sentirse contentos. Por eso yo tambien intento ayudar, por que veo que es básico que entre nosotros nos ayudemos.
Y esto no es una critica a nadie en concreto, por que seguro que va a faltar tiempo para que salgan los defensores de este y del otro , que yo solo tengo que agradecerles su trabajo diario. Y los que puedan leer entre lineas veran que si alguien nuevo quiere entrar a programar en B4A y tiene muchas herramientas, se pondrá a programar antes en B4A que en otro sistema de desarrollo, y eso nos benefica a todos y en especial a B4A que venderá mas licencias, asi que los detractores de esta critica constructiva que hago, antes de ponerse a escribir y ponerme de vuelta y media, que piensen en que mi beneficio es el de todos incluido los accionistas de B4A, he apostado por programar en B4A y lo unico que quiero es tener buenas herramientas y no perder mas tiempo en buscar algo que desconozco que en hacer el código. Y nadie nunca aprendió nada de recibir golpecitos en la espalda y de oir "que bueno eres", pero si de "esto lo podemos mejorar".

Saludos

Jesus
 
Top