CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

Implementazione di un timer per un servizio

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Mar 2009
    Località
    Milano
    Messaggi
    103
    Smartphone
    San Francisco

    Ringraziamenti
    3
    Ringraziato 3 volte in 2 Posts
    Predefinito

    Implementazione di un timer per un servizio

    Ciao a tutti,
    sto sviluppando un servizio che ogni tot minuti deve fare stuff (roba)

    All'inizio avevo usato un time Timer che lanciava un Timertask, inizializzando il Time 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 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.

    Qualcuno ha qualche idea?
    grazie mille,
    ciao

    Marco

  2.  
  3. #2
    Senior Droid L'avatar di dhalia


    Registrato dal
    Oct 2010
    Messaggi
    314

    Ringraziamenti
    3
    Ringraziato 27 volte in 26 Posts
    Predefinito

    Quote Originariamente inviato da bovello Visualizza il messaggio
    Ciao a tutti,
    sto sviluppando un servizio che ogni tot minuti deve fare stuff (roba)

    All'inizio avevo usato un time Timer che lanciava un Timertask, inizializzando il Time 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 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.

    Qualcuno ha qualche idea?
    grazie mille,
    ciao

    Marco
    Già risolto?
    Se no ti consiglio di andare nel mio topic tutorial qui su androidiani, cercare l'ultimo che ho postato, andare sul mio sito e scaricare l'esempio con alarm manager

    Pessima idea quella di quel timer hehe

    Tralasciando ciò mi piacerebbe aiutare un po' di più ma in questo periodo son molto incasinato......
    My School Manager: per Genitori e Alunni
    Memory il gioco di quando eri bambino
    Yummes WallPaper un simpatico wallpaper

    My WebSite:
    AlchemiaAndroid

    My Blog:
    AlchemiaSoft

  4. #3
    Androidiano


    Registrato dal
    Mar 2009
    Località
    Milano
    Messaggi
    103
    Smartphone
    San Francisco

    Ringraziamenti
    3
    Ringraziato 3 volte in 2 Posts
    Predefinito

    già risolto, grazie.
    Ho utilizzato Alarm Manager e fa il suo dovere.
    Sarebbe interessante capire gli impatti sulla batteria delle diverse metodologie, li dove le esigenze permetterebbero di utilizzale indistintamente.
    Le mie app su Android Market:

    Auto Profile Switcher, Share your words widget

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy