Autore Topic: Aiuto su Service.  (Letto 1361 volte)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Aiuto su Service.
« il: 19 Settembre 2011, 15:47:22 CEST »
0
Ciao,
mi sto cimentando nella creazione di un service.
Sono arrivato alla sua creazione, partenza e stop.

Ma non riesco a capire dove mettere il codice da eseguire??
Vorrei che tale codice venga anche eseguito ogni x minuti.

Forse mi sono perso un pezzo ma non riesco a capire dove ??

grazie
ciao
PS: sono partito da questo tutorial
Android Sample Source Code: Basic Android background Service
seguendo poi la guida ufficiale
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Aiuto su Service.
« Risposta #1 il: 19 Settembre 2011, 16:07:59 CEST »
0
Ciao,
mi sto cimentando nella creazione di un service.
Sono arrivato alla sua creazione, partenza e stop.

Ma non riesco a capire dove mettere il codice da eseguire??
Vorrei che tale codice venga anche eseguito ogni x minuti.

Forse mi sono perso un pezzo ma non riesco a capire dove ??

grazie
ciao
PS: sono partito da questo tutorial
Android Sample Source Code: Basic Android background Service
seguendo poi la guida ufficiale

Io se fossi in te farei semplicemente farei partire il service schedulandone l'esecuzione con un AlarmManager.

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Aiuto su Service.
« Risposta #2 il: 19 Settembre 2011, 16:24:20 CEST »
0
In questo modo creo un ciclo infinito (infinito fin tanto che non fermo il service).

quindi se non ho capito male:

  • faccio manualmente partire il servizio
  • il servizio esegue il codice e alla sua fine registra l'AlarmManager fra xminuti
  • scatta l'AlarmManager che fa ripartire l'onstart del service
  • il servizio esegue il codice e alla sua fine registra l'AlarmManager fra xminuti
  • e così via..


-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Aiuto su Service.
« Risposta #3 il: 19 Settembre 2011, 16:26:06 CEST »
0
In questo modo creo un ciclo infinito (infinito fin tanto che non fermo il service).

quindi se non ho capito male:

  • faccio manualmente partire il servizio
  • il servizio esegue il codice e alla sua fine registra l'AlarmManager fra xminuti
  • scatta l'AlarmManager che fa ripartire l'onstart del service
  • il servizio esegue il codice e alla sua fine registra l'AlarmManager fra xminuti
  • e così via..


No, quando ti serve (per esempio al boot) registri l'AlarmManager e poi lui ti avvierà il servizio ogni tot minuti fino a quando non lo cancelli esplicitamene ;)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Aiuto su Service.
« Risposta #4 il: 19 Settembre 2011, 16:47:23 CEST »
0
Mamma mia quanta confusione.

Quindi il service non mi serve a nulla.
Credevo fosse lui a gestire queste cose.
Ti ho aggiunto ad una mia cerchia su g+.
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Aiuto su Service.
« Risposta #5 il: 19 Settembre 2011, 16:53:42 CEST »
0
Mamma mia quanta confusione.
Quindi il service non mi serve a nulla.

Se l'operazione che devi fare è istantanea puoi anche non usarlo e utilizzare direttamente un BroadcastReceiver ma se devi effettuare un'operazione un po' pesante (tieni conto che se un BR non si completa in 10sec hai un ANR) ti conviene comunque avviare il service :)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Aiuto su Service.
« Risposta #6 il: 19 Settembre 2011, 20:08:05 CEST »
0
riassumo quanto ho capito.
Ho dedotto che il service serva per tutte quelle operazioni in backgroud cioè quando si vuole recuperare delle informazioni ad avvenimenti prestabiliti senza l'ausilio dell'utente.
Avvenimenti, ho detto giusto?? o dovevo dire ad intervalli??

Esempio, App che gestiscono il livello della batteria.

dovrebbero avere un service che :
al cambio di livello di batteria aggiorna la UI dell'appwidget.
giusto??

Quello che non capisco è come implementare l' onStart del Service.
I comandi vengono eseguiti una sola volta.
Potrei mettere un timer!!
Attivo il timer con onStart e lo disattivo con onDestroy del service.

.... allora mi rispondo da solo alla domanda fatta prima..
non ad avvenimenti ma a intervalli.

cosa ne dite voi??

-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: Aiuto su Service.
« Risposta #7 il: 19 Settembre 2011, 21:05:34 CEST »
0
Scusa ma cosa non ti è chiaro di quanto ti ho scritto sopra?

Sent from my HTC Desire

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re: Aiuto su Service.
« Risposta #8 il: 19 Settembre 2011, 21:13:53 CEST »
0
Scusa ma cosa non ti è chiaro di quanto ti ho scritto sopra?

Sent from my HTC Desire


onStart del service lo si implemente solo con il timer per farlo "girare" a tempi prestabiliti??

-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Aiuto su Service.
« Risposta #9 il: 20 Settembre 2011, 01:14:34 CEST »
0
Allora, calma e gesso.
Prima di tutto dovresti capire cosa è un Service e anche il suo lifecycle.
Nel progettare il tuo software dovresti capire il grado di complessità delle operazioni che vuoi eseguire e quindi decidere se farle eseguire ad un Service piuttosto che da un BroadcastReceiver oppure in un Thread...ecc.
Ora, dato che tu vorresti eseguire una determinata operazione ogni X tempo, c'è da valutare il fatto di demandare tale operazione ad un Service o meno, e questo lo devi decidere tu.
Un Service quando viene creato,generalmente rimane in vita fintanto che non viene fermato con stopService() o stopSelf(). Nell'esempio che hai linkato tu, viene creata una "connessione" con il service usando bindService, il quale ritorna IBinder del metodo onBind() del Service alla ServiceConnection Interface dichiarata nel metodo bindService(), ma sia l'IBinder che la ServiceConnection sono settate a null. Ora con bindService() il Service viene solo creato, quindi viene eseguito solo il metodo onCreate del Service, successivamente viene chiamato esplicitamente il servizio con startService() e quindi viene eseguito onStart(). Dato che non c'è connessione (la ServiceConnection è null) il servizio cessa di esistere e viene eseguito onDestroy(). Creare un Service in questo modo ha poco senso se non quello esemplificativo, ti consiglio di capire bene cosa è un Service e come/dove usarlo e dai una occhiata anche all'esempio che trovi nella documentazione : LocalServiceSample
per capire come usare una ServiceConnection e poter comunicare con il Service.
Potresti così creare, ad esempio, un Service una sola volta e comunicare con esso ogni X minuti, invece di creare un Service ogni X minuti.