Hola Pablo:
Cuando te dije que miraras el comportamiento de una APP con Starter no era para hacerte perder el tiempo, y ademas te dije que ahi verias por que te pasaba y cual seria la solución.
Como veo que os estais liando en crear codigos sin tener en cuenta el ciclo con Starter, he creado un programa vacio, con starter, un modulo de servicio (ModuloDeServicio) que dentro tiene un sub (Leer) que lo unico que hace es escribir un log para simplemente ver tiempos y secuencia.
Esta es la secuencia con vuestra propuesta:
Estoy en Process_Globals Main
Inicio el Tiempo en milisegundos
Estoy en Process_Globals Starter
Tiempo transcurrido 1
Estoy en Process_Globals ModuloDeServicio
** Service (starter) Create **
Tiempo transcurrido 2
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Main llama al servicio con StartServiceAt
Tiempo transcurrido 155
** Activity (main) Resume **
Tiempo transcurrido 165
** Service (modulodeservicio) Create **
Tiempo transcurrido 5168
** Service (modulodeservicio) Start **
Tiempo transcurrido 5170
Estoy en Sub Service_Start ModuloDeServicio y mando a Sub Leer
Estoy en Sub Leer de ModuloDeServicio
Tiempo transcurrido 5172
Creo que se ve claramente por que no hace lo que "esperas", a esto podriamos ganarle tiempo, si ese
StartServiceAt en vez de llamarlo a 5 segundos lo llamas a
1 milisegundo, esta seria la secuencia:
** Activity (main) Pause, UserClosed = true **
Estoy en Process_Globals Main
Inicio el Tiempo en milisegundos
Estoy en Process_Globals Starter
Tiempo transcurrido 1
Estoy en Process_Globals ModuloDeServicio
** Service (starter) Create **
Tiempo transcurrido 2
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Main llama al servicio con StartServiceAt
Tiempo transcurrido 115
** Activity (main) Resume **
Tiempo transcurrido 117
** Service (modulodeservicio) Create **
Tiempo transcurrido 1143
** Service (modulodeservicio) Start **
Tiempo transcurrido 1144
Estoy en Sub Service_Start ModuloDeServicio y mando a Sub Leer
Estoy en Sub Leer de ModuloDeServicio
Tiempo transcurrido 1146
Hemos ganado mas de 5 segundos (los tiempos estan en milisegundos)
Pero digo yo, para que decirle que ejecute el servicio a un tiempo, si lo que quieres es que se ejecute "ya", entonces cambiamos el
StartServiceAt por
StartService y esta es la secuencia:
Estoy en Process_Globals Main
Inicio el Tiempo en milisegundos
Estoy en Process_Globals Starter
Tiempo transcurrido 1
Estoy en Process_Globals ModuloDeServicio
** Service (starter) Create **
Tiempo transcurrido 2
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Main llama al servicio con StartServiceAt
Tiempo transcurrido 190
** Activity (main) Resume **
Tiempo transcurrido 211
** Service (modulodeservicio) Create **
Tiempo transcurrido 212
** Service (modulodeservicio) Start **
Tiempo transcurrido 213
Estoy en Sub Service_Start ModuloDeServicio y mando a Sub Leer
Estoy en Sub Leer de ModuloDeServicio
Tiempo transcurrido 213
Le hemos ganado casi un segundo, pero tu me diras, mi problema sigue siendo el mismo, se ejecuta antes el Activity que el Sub del servicio, y ahi es donde entra lo que te dije de leete esto y ahi veras por que te pasa y la solución.
Por que te pasa ya lo hemos visto, que la secuencia es esta y por muchos inventos que hagamos no va de dejar de ser esa:
Main.Process_Globals
Starter.Process_Globals
Otros Activity.Process_Globals
Otros ModulodeCódigo.Process_Globals
Starter.Service_Create
Starter.Service:Start
Main.Globals
Main.Activity_Create
Main.Activity_Resume
Asi que está claro que tenemos que hacer, lo ideal es simplemente llamar a nuestro SUB Leer desde Starter, pero poniendo el Sub Leer en Starter, ya que este ademas de módulo de arranque es un servicio que podremos llamarlo como cualquier otro, crees que Erel iba a hacer un arranque que sirviera para "molestar"? está claro que no, pero tenemos primero que leer su funcionamiento para asi saber como emplearlo.
Si no quieres emplear Starter para hacer tus llamadas, pues llama al modulo de servicio con un
StartService desde
Sub Service_Create y en el
Sub Service_Start (StartingIntent As Intent) del modulo de servicio llama a tu sub de leer ,esta es la secuencia:
Estoy en Process_Globals Main
Inicio el Tiempo en milisegundos
Estoy en Process_Globals Starter
Tiempo transcurrido 0
Estoy en Process_Globals ModuloDeServicio
** Service (starter) Create **
Tiempo transcurrido 2
Starter llama al servicio con StartServiceA
** Service (starter) Start **
** Service (modulodeservicio) Create **
Tiempo transcurrido 73
** Service (modulodeservicio) Start **
Tiempo transcurrido 73
Estoy en Sub Service_Start ModuloDeServicio y mando a Sub Leer
Estoy en Sub Leer de ModuloDeServicio
Tiempo transcurrido 74
** Activity (main) Create, isFirst = true **
Tiempo transcurrido 115
** Activity (main) Resume **
Tiempo transcurrido 115
Perdon por todo este rollo
, pero era la forma de demostrar como se puede hacer y por que.
Aun asi, hay que tener en cuenta que hace el main, y que hace tu modulo, por que puede que cambie algo en el comportamiento global. Yo, como te he dicho simplemente he creado un proyecto vacio que llama a esos modulos y escribe Logs para ver la secuencia. Lo ideal es lo que dice Erel, si necesitas reiniciar cosas hazlo desde el Starter que para eso ha sido creado.
Saludos