Ti dò una bella (spero) risposta lunga, così anche
@Star-Dust sarà contento (e dirà che ho deviato dalla domanda ? - no, in realtà non ti consiglierò una cosa diversa da quanto già fatto in preDecenza).
Vorrei chiarirti la cosa del "tab Starter", come lo hai chiamato. I Tab che vedi sopra, come lo Starter, sono i tuoi moduli di progetto, che possono essere di diverso tipo:
Activity
Services (servizi - come lo Starter)
Code modules (moduli di codice)
Class modules (moduli di classe o più semplicemente "classi")
Quindi, quello che avresti dovuto chiedere, anziché:
quindi devo avviare il timer nella tab Starter?
Sarebbe dovuto essere: "quindi devo avviare il timer nel servizio Starter?"
(Non ti sto correggendo, voglio solo farti notare cosa contiene il tab Starter).
Il timer va creato ed utilizzato all'interno di un modulo di servizio (nel tuo caso, perché vuoi che esso continui a "lavorare" anche se la tua app non è visibile sullo schermo), ma il modulo di servizio Starter non va bene per questo, se vuoi che il servizio rimanga attivo anche per ore. Per quest'ultima cosa, per far funzionare a lungo il servizio senza che Android lo "uccida", bisogna seguire un esempio di Erel:
Background location tracking.
Andando in ordine, prima vediamo come dovrebbe funzionare il timer in un modulo di servizio ma aggiornando la grafica di un'Activity (nel tuo caso far avanzare la CircularProgressBar). "Semplicemente" l'evento Tick del timer, che come tutto il codice che riguarda il timer starà nel modulo di servizio (chiamiamolo srvCircularPB), dovrà chiamare una routine che si trovi nell'Activity e che aggiorni la grafica (la tua CPB).
Dato che attualmente la CPB viene aggiornata nella routine-evento tmr_Tick (o come l'hai chiamata, non so) della tua Main, dovrai chiamare questa (cambiagli nome, chiamala soltanto "Tick", magari, e dovrai eliminare l'oggetto timer nella Main - la sua dichiarazione e inizializzazione).
[Per aggiungere un nuovo modulo di servizio al tuo progetto]
Mettiamo che nel modulo di servizio srvCircularPB tu abbia dichiarato un timer di nome "tmr":
CallSubDelayed(Main, "Tick")
lancerà appunto la routine "Tick" della Main.
Direi che, fin qui, il tuo modulo di servizio srvCircularPB potrebbe essere più o meno così:
Sub Process_Globals
Private tmr As Timer
End Sub
Sub Service_Create
tmr.Initialize("tmr", 1000)
End Sub
Public Sub StartTimer(Duration As Float)
If tmr.Enabled Then tmr.Enabled = False
tmr.Enabled = True
End Sub
Public Sub StopTimer
tmr.Enabled = False
End Sub
Private Sub tmr_Tick
CallSubDelayed(Main, "Tick")
End Sub
Intanto prova così; se non funziona, e se puoi, allega il progetto.
Anzi, ho sospeso la scrittura di questo luuuungo post, ho preso una vecchia versione di
@Sagenut, e l'ho modificata come ti ho appena spiegato (ma tu
prima prova a farlo da solo, seguendo quanto scritto sopra).
Manca ancora la parte che "dovrebbe" salvare il tuo servizio dall'uccisione da parte di Android (quella per la quale ti ho suggerito il tutorial di Erel,
Background location tracking), ma per il momento... mi sarei rotto qualcosa ?