Autore Topic: AsyncTask e PendingIntent  (Letto 641 volte)

cribcaged

  • Visitatore
AsyncTask e PendingIntent
« il: 22 Aprile 2012, 13:50:14 CEST »
0
Salve a tutti,

volevo sapere cosa ne pensate di questa soluzione:
ho un app che deve spedire dei dati ad un server solo in un'activity specifica e non volevo creare un servizio in background (per tenere l'app "leggera")
visto che l'interazioni con il backend sono minime. In questa activity inizialmente avevo creato un AsyncTask che fa appunto questa connessione,
ma ovviamente c'è il problema che se avvio il background thread e l'utente torna alla home o avvia un'altra app, il thread prosegue correttamente
eseguendo la post al server...però poi nel postExecute() ovviamente l'activity non è più in foreground quindi il codice non viene eseguito
e quindi se l'utente fa resume dell'app, l'app non si è accorta che il thread è andato a buon fine!

La mia soluzione attuale è che quando si avvia l'AsyncTask, gli si passa un PendingIntent che viene chiamato quando il thread ha finito
di dialogare con il server...quindi ora se l'utente torna alla home/avvia un'altra app, quando il thread ha finito lancia il PendingIntent
e l'app torna in foreground notificando 'utente con il risultato dal server.

Voi cosa ne dite? E' una soluzione accettabile? C'era un altro modo di implementarlo (aldilà del service)?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:AsyncTask e PendingIntent
« Risposta #1 il: 22 Aprile 2012, 15:19:29 CEST »
0
A me sinceramente non piace molto il fatto che l'activity venga riavviata per far vedere il risultato. Se l'utente ha deciso di chiuderla l'app se ne deve stare buona buona in background.
L'approccio che ti suggerirei è qullo di usare un Service più un ordered broadcast.
Ti allego un esempio, da cui se vuoi puoi sostituire il Service con un IntentService.

cribcaged

  • Visitatore
Re:AsyncTask e PendingIntent
« Risposta #2 il: 22 Aprile 2012, 15:41:56 CEST »
0
Innanzitutto, grazie per la risposta!

Beh si il Service è ok, semplicemente volevo capire se c'era modo con l'async di ottenere lo stesso risultato senza
'scomodare' il servizio!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:AsyncTask e PendingIntent
« Risposta #3 il: 22 Aprile 2012, 15:52:59 CEST »
0
No, l'asyntask non è fatto per questo.
Se la tua computazione può richiedere un po' di tempo è giusto spostarla in un Service perchè dal momento in cui l'Activity va in background può essere terminata in qualsiasi momento.

cribcaged

  • Visitatore
Re:AsyncTask e PendingIntent
« Risposta #4 il: 22 Aprile 2012, 15:59:02 CEST »
0
Capito, andando comunque più nel dettaglio a me rimane questo dubbio:
se io avvio il servizio e l'app va in background,
quando il servizio ha finito ho bisogno di notificarlo all'utente e quindi (come nel tuo esempio) si può
usare una notifica di sistema; però quando torno nell'app se devo 'fare' qualcos'altro dopo il termine
della chiamata (tipo chiamare il finish sull'activity che ha generato l'avvio del servizio)
...come faccio a notificare all'app che il servizio ha terminato?
uso tipo un boolean nelle sharedpreferences per dire si ha finito, no non ha ancora finito e lo leggo nel resume?