Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Tarea en segundo plano (https://www.clubdelphi.com/foros/showthread.php?t=86754)

Fossy 28-09-2014 17:33:39

Tarea en segundo plano
 
Hola amigos:

Desde XE5 esperaba que con el tiempo se implementara algo en forma de servicio, tarea o lo que sea (me da igual) que se pueda quedar residente y en segundo plano.

Tan sencillo como que tengo la necesidad de enviar coordenadas GPS cada 15 segundos a un servidor teniendo en cuenta el siguiente factor:

Los que van a llevar los móviles son repartidores, que lo usarán además para llamar, enviar mensajes, etc., y por supuesto si se les apaga el móvil, la tarea, servicio o lo que sea debe de poder cargarse automáticamente al encenderlo de nuevo.

Total, que necesito de verdad hacer algo residente que envíe la información, ¿se os ocurre algo que pueda hacer con el nuevo XE7?.

Gracias amigos.

nlsgarcia 28-09-2014 18:28:06

Fossy,

Cita:

Empezado por Fossy
...Desde XE5 esperaba que con el tiempo se implementara algo en forma de servicio, tarea...que se pueda quedar residente y en segundo plano...¿Se os ocurre algo que pueda hacer con el nuevo XE7?...

:rolleyes:

Pregunto: ¿Has considerado la posibilidad de usar hilos? :confused:

En Delphi XE7 existe una nueva librería Parallel Programming:
Cita:

New in Delphi XE7! The new Parallel Programming library exponentially increases performance of existing C++ and Object Pascal code by parallelizing threads that can take full advantage of multi-core CPUs. Also, build 64-bit Windows applications with C++ and Object Pascal to take advantage of the latest hardware, access more memory, and push the envelope of performance with the easy to integrate Parallel Programming Library. All Windows technologies are 64-bit enabled, including VCL, FireMonkey, RTL, compilers and debugger, to streamline the migration of existing applications to 64-bit Windows.

Tomado de : Delphi XE7
Revisa esta información:
Espero sea útil :)

Nelson.

Fossy 29-09-2014 10:11:27

Gracias Nelson.

La librería nueva no soluciona nada, ya que las rutinas están todas al mismo nivel se programen con el código que se programen.

En cuanto a los Threads, sólo están "vivos" mientras el programa esté en ejecución. Si el programa lo cierras se acabaron las Threads, por eso pregunto por una forma de dejar una tarea residente (con la aplicación cerrada), no sé si me explico.

La solución es compleja para Delphi-Android, sin embargo es un chasquido de dedos con Titanium por ejemplo.

Un saludo.

chaosego 29-09-2014 10:15:44

Hola Fossy, mirate este hilo de Brian Long donde explica como crear servicios en segundo plano con delphi.

Fossy 29-09-2014 12:47:10

Gracias chaosego.

Ese código no solo le he mirado sino que he hecho pruebas con el, incluso conseguí mejorar algo, pero no funciona. Su propio autor lo dice al final del artículo, que se trata de algo muy experimental y que él mismo no ha podido arreglar que dejara de colgarse. Lo cierto es que no funciona bien, se cuelga mucho y provoca problemas. Para probar y jugar un poco no está mal, teniendo en cuenta además que ese artículo salió recién salido el XE5 hace casi 2 años, y hoy día con el XE7 Embarcadero ya debería haber sacado algo para crear servicios, ya que han metido DE TODO y bajo mi humilde opinión, en el mayor de los casos no sirve para nada, ya que hoy día lo que impera es el servicio y una APP sin servicios trabajando en segundo plano casi no sirve para nada.

Es increíble ver como han hecho todo tipo de cosas para la nube, y cuando la App está "off" ¿qué haces?..., es que no puedes mandarle nada, ni un mensaje, ni una actualización de algo..., nada!!, muy bonito todo lo que han hecho pero sólo funciona si la App está activa. Vamos, imposible realizar un WhatsApp, o un calendario en la nube que te avise de cosas..., ni siquiera un sistema de pedidos online (si la app no conecta al servidor cada x minutos, imposible que se entere de pedidos ni de NADA!!). Nos han cargado Delphi de cielos y nubes in aprovechables.

Yo es que no lo entiendo, de verdad.

Gracias amigos!!.

kurono 30-09-2014 08:42:36

amigo Fossy cual es el codigo de la aplicacion service que menciona chaosego ya que descargo un comprimido con varios ejemplo execpto el de services

chaosego 30-09-2014 10:49:54

Hola Fossy, hace tiempo encontré estos hilos, estan en bulgaro creo, pero los ejemplos se entiende facilmente:

- Gestión del Back-Button en dispsitivos. Interesante para mandar al background programas.
- Servicios en BackGround... Otra manera de ver como implementarlos.

Espero que alguno te sirva, yo he probado adaptando los de backbutton y la verdad es quye he conseguido lo que necesitaba, que el programa se quedara 'oculto' en segundo plano y funcionando... en mi caso un programa para escuchar la radio local online.

Fossy 30-09-2014 11:25:42

Kurono son estos enlaces:

http://blog.blong.com/2013/11/delphi...-services.html
http://blog.blong.com/2013/11/delphi...es-part-2.html


Chaosego:

Gracias por los enlaces, efectivamente la alternativa pasa por dejar las Apps en segundo plano con un timmer, algo que me parece una barbaridad porque si la App ocupa en memoria 40 megas, estamos mandando esos 40 megas a segundo plano manteniendo toda una App completa en ejecución. Sin embargo, no nos queda otra...

Un servicio en Java es un pequeño código residente que la App deja ahí en ejecución, mientras la App se CIERRA perfectamente y no sobrecarga nada, a la vez que también preserva el consumo de batería. Cuando ese servicio tiene que introducir datos o interactuar con la App, la ejecuta de nuevo (normalmente a petición del usuario), y así es como deberíamos tener funcionando nuestras Apps los desarrolladores de Delphi a estas alturas.

¿Quién no tiene un juego en el móvil y de vez en cuando se recibe una notificación?, yo por ejemplo tengo instalado uno de póker y cuando me regalan puntos recibo una notificación SIN EL JUEGO EN EJECUCIÓN. Y obviamente si le pincho a la notificación el juego se abre (interactua el servicio con la App).

Esa es la gran diferencia entre Servicio y Background. Pero como ya digo..., no nos queda otra.

Gracias!!.

kurono 30-09-2014 19:22:59

gracia Fossy por el link estuve probando la aplicacion antes de bajar el codigo fuente y la aplicacion a mi entender funciona bien si bien es cierto que cuando abres la aplicacion de nuevo el servicio se detiene creo que hay forma de mejorar esa parte en mi caso le di la prueba de 7 horas sin deternerse asi que creo que con un poco de mejoras en el codigo podria funcionar muy bien

Fossy 01-10-2014 21:41:51

Uff, implementalo en una App tuya Kurono, vas a ver la de problemas que da, y yo pude estabilizarlo un poco, pero no es para nada fiable (lo dice su autor al final del artículo).

Estoy ahora en la alternativa, es decir, evitar que el usuario pueda salir de la App mediante el "BackButton" (si le da a Home la App pasa a segundo plano). He logrado desactivar el BackButton para que no haga nada, pero no encuentro nada para usar una instrucción que mande la App a segundo plano (no puedo emular la pulsación del botón Home tampoco). De hecho hay algunos foros extranjeros donde se está debatiendo esto mismo y nadie da con la solución.

Al final volvemos a lo mismo... ¿de qué sirve tanto componente basados en BAAS y nubes si las App no son capaces de recibir nada si no están activas?, que alguien me lo explique...

Un saludote!!.

kurono 02-10-2014 02:06:42

amigo fossy los problema ya me surgieron tenes razon por lo que e probado el backbutton y es la opcion mas facil que veo para este tema estoy igual que tu y me imagino que muchos miembros de este club, deseperado por tener un procedimiento o una funcion que haga esto por uno

ahora veo un problema con el backbutton y lo menciona en unos de los comentario anteriores y es que uno esta mandando una aplicacion completa a segundo plano con lo cual puede producir que android cierre la aplicacion para liberar espacio

un comentario mas hay un componente en delphi xe5 de servicio de notificacion podria ese componente ser la solucion, o sirve para notificar en primer plano

chaosego 02-10-2014 11:42:58

Hola a todos, voy a intentar aplicar el código de Brian Long en XE7 con el implementador de java que lleva a ver que pasa, ya os comentaré los resultados...


La franja horaria es GMT +2. Ahora son las 10:30:14.

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