Hola Carlos:
Como decia Jack el destripador: "vayamos por partes"
Cosas que aunque no tengan que ver con el problema es interesante que las corrijas:
El temporizador inicializalo asi:
Code:
if FirstTime then
Temporizador.Initialize("Timer1", 1000)
Temporizador.Enabled = True
end if
Si no, crearas nuevas instancias cada vez que entre en create, por ejemplo cuando gires el movil.
Por coherencia, cambia esto de:
Code:
StartServiceAt("", DateTime.Now + 1 * DateTime.TicksPerSecond, True)
Segundos = Segundos + 1
Main.Secs = Segundos
A:
Code:
Segundos = Segundos + 1
Main.Secs = Segundos
StartServiceAt("", DateTime.Now + 1 * DateTime.TicksPerSecond, True)
Si tienes un módulo de servicio con la variable
Segundos, que necesidad tienes de asignar otra en main asi :
En main hazlo asi:
Code:
Sub Timer1_Tick
Label1.Text = "Secs: " & Starter.Segundos
End Sub
El primer problema es que el servicio encargado de contar los segundos se ejecuta al iniciar la aplicación. No sé si es normal o no debería suceder.
Lo que te está ocurriendo, es que la primera vez que lo pusiste en marcha,
como nunca paras el servicio, cuando entras sigue corriendo, o pones un botón para pararlo, o el boton de poner en marcha haces que a una pulsación pare y a otra lo ponga en marcha, y creas una etiqueta que te diga el estado del servicio.
El segundo problema es que el servicio se ejecuta muy lento.
Pero el servicio se ejecuta cada 2 o 3 segundos. A veces parece acelerar y a veces enlentecer.
Lógico, no puedes poner una llamada cada segundo por que te estas comiendo todos los recursos del sistema, y por eso te actualiza erroneamente. Los servicios a poder ser tienen que ser con llamadas largas, si no saturas el sistema.
Y ahora viene la pregunta del millón, si es un taxímetro, que necesidad tienes de crear un servicio?
Ese Taxímetro tendra que estar siempre en marcha y visible, y si por ejemplo quieres salir del Activity, que necesidad tienes de crear un servicio machacando los recursos si no estas visualizando nada?
Yo haria una cosa muy facil:
- Crea una variable global (
long) en main (
Sub Process_Globals)
- Cuando quieras "poner en marcha" tu taxímetrro a esta variable dale el valor en ticks de la hora actual (
HoraInicio= DateTime.Now) y guardate la hora inicial en un fichero.
- El temporizador de main, emplealo, pero no para contar segundos, si no para visualizar el tiempo transcurrido (Hora Actual - Hora Inicio taxímetro)
Si sales con el taxímetro en marcha y vuelves a entrar, lee el fichero y asigna la Hora de Inicio del taxímetro a la variable global de Inicio de hora, si no existe el fichero (cuando pares el taxímetro borras el fichero) no haces nada al volver a entrar. Esto apenas consumirá recursos.
Saludos