Autore Topic: servizio con timer per autoupdate  (Letto 974 volte)

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
servizio con timer per autoupdate
« il: 14 Luglio 2011, 00:18:58 CEST »
0
Ciao a tutti,
sto sviluppando un servizio che ogni tot minuti deve fare stuff (roba).

All'inizio avevo usato un Timer che lanciava un Timertask, inizializzando il Timer sia come daemon thread che no (non ho notato grossi cambiamenti tra i due).

Testando l'applicazione mi sono reso conto che l'esecuzione del job avveniva correttamente ma con scadenze temporali un po' approssimative. Con lo schermo spento tragedia... un job che doveva girare ogni 15 minuti stava ore senza dare segni di vita per poi eseguire tutte le schedulazioni una dietro l'altra.

Leggendo un po' in giro e sul sito ufficiale Updating the UI from a Timer | Android Developers (anche se io non devo aggiornare la user interface) gli Handler sembravano una soluzione migliore, quindi ho utilizzato un oggetto handler a cui ho associato la sua bella classe Runnable.
Contestualmente, a scanso di equivoci, ho inserito una procedura di logging su file in modo da monitorare in fase di test la correttezza delle esecuzioni.

Fin quando il telefono rimane acceso o se in stand-by ma connesso via cavo usb al pc, è un orologio svizzero e non perde una schedulazione.

Nel momento in cui stacco il telefono dal cavo usb e va in stand-by le schedulazioni si interrompono... riprendendo riattacando il dispositivo al pc o tenendo il display acceso.

Quando funziona mi è sembrato migliore del Timer, perchè più puntuale, però in standby forse si comporta anche peggio perchè sembra che le schedulazioni perse non vengano mai recuperate.

Il mio servizio può essere controllato da una activity, ma principalmente gira per i fatti suoi e dovrebbe eseguire il suo codice a scadenze prefissate praticamente sempre (ok... a telefono spento no :P)
Il problema mi sembra di capire che risieda nel fatto che il telefono ad un certo punto va in standby e disabiliti l'esecuzione dei thread (o ne abbassi di molto la priorità).
Come fare??? Sbaglio qualcosa nell'implementazione degli Handler?

Leggevo anche in altri vostri post di utilizzare Alarm Manager/Service che dovrebbero lavorare ad un livello più basso gestendo gli interrupt del processore. Però leggevo su Android Developers che erano sconsigliati in luogo degli Handler per la gestione dei timer ricorrenti.
Inoltre mi sembrava di capire, ma probabilmente sbaglio, che l'utilizzo dell'alarm manager implichi il lancio di un'activity che si presenti all'utente, mentre io dovrei avviare un servizio o cmq eseguire delle operazioni senza alcuna interfaccia utente.
Avete un buon tutorial da linkare che spieghi l'utilizzo dell'alarm manager, attori e modalità di utilizzo e comunicazione?

complimenti per il forum e sopratutto per la sezione dev molto ricca, forse la migliore italiana fin ad ora incontrata. bravi!
grazie a chiunque voglia darmi una mano,
ciao

Marco

Offline avsoft

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +2
    • Mostra profilo
  • Sistema operativo:
    Windows 8
Re:servizio con timer per autoupdate
« Risposta #1 il: 09 Settembre 2011, 19:40:54 CEST »
0
Io credo di avere lo stesso problema tuo!
Quando il telefono va in stand by l'applicazione che stava girando non fa più nulla!
Sei riuscito a risolvere?