Autore Topic: Application vs Service con Thread  (Letto 647 volte)

Offline wino_7

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s
  • Play Store ID:
    Francesco Di Iorio
  • Sistema operativo:
    Windows 7, Debian
Application vs Service con Thread
« il: 05 Ottobre 2011, 11:17:56 CEST »
0
Salve a tutti,
ho bisogno del vostro aiuto.
Praticamente ho letto un po' ovunque che un service viene eseguito all'interno del main thread dunque se uso il service per il recupero di dati dal web sicuramente l'interfaccia grafica rimane bloccata.
Allora si adotta la soluzione di creare un thread al suo interno per evitare tale inconveniente.
Ma allora a cosa servono i service??? Non posso semplicemente creare un thread all'interno dell'activity senza creare il service???
Inoltre vorrei sapere visto che nelle varie activity devo visualizzare questi dati presi dal web mi conviene istanziare il client Http in un service con thread oppure in un oggetto application???
So che l'oggetto application e un oggetto condiviso quindi se ci metto il client Http posso semplicemente richiamarlo senza doverlo riistanziare ad ogni richiesta.
Voi cosa mi consigliate di fare?

Offline theclash

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Linux Mint
Re:Application vs Service con Thread
« Risposta #1 il: 26 Ottobre 2011, 15:15:28 CEST »
0
Un service ti serve per effettuare operazioni in background, e non necessita di interfaccia grafica. Se i dati da scaricare li utilizza solo la tua Activity potresti fare un metodo che crea un nuovo thread e finirla li. Ma se l'operazione può servire ad altre Activity della tua app ritengo sia molto più pulito creare un service con un thread che gestisca queste operazioni, rende la struttura più modulare ed evita la ridondanza del codice.
Nel caso in cui volessi una interazione tra la tua activity ed il service lo avvi come bound service, con il comando bindService() e setti una connessione (ti rimando alla documentazione per questa parte Service | Android Developers). Così potrai richiamare tu stesso i metodi del service es: mService.downloadData();
In ogni caso essendo il download di dati una operazione long-running di durata indefinita non potrai mai sapere quando finirà di scaricare i dati, quindi ti consiglio di implementare anche un broadcast receiver nell'activity che riceverà un intent dal service non appena avrà finito il download, in questo modo avrai la certezza che i dati siano arrivati ed eviterai una marea di NullPointerException.
L'oggetto application non l'ho mai utilizzato, mi sembra una soluzione sporca per estendere la visibilità di alcuni dati a tutta l'applicazione, aspetterei qualcuno più esperto per sentire cosa ne pensa.
Buon lavoro ;)