Autore Topic: Service a tempo  (Letto 689 volte)

Offline trucco75

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Service a tempo
« il: 09 Aprile 2011, 06:55:40 CEST »
0
Salve sono proprio agli inizi.La mia esigenza che ogni tot tempo parta un servizio che controlli online un XML e se si verifica una condizione venga lanciata la mia applicazione o se aperta venga lanciata un' activity.
Ho letto il libro di Carli...per i Servizi ok...ma non c'erano i servizi a tempo. Non voglio il codice ma una dritta dove studiare o magari la prassi o casi d' uso ...poi da li mi vado a studiare passo Passoni ciò che devo

Sent from my GT-I9000 using Tapatalk

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service a tempo
« Risposta #1 il: 11 Aprile 2011, 16:27:31 CEST »
0

Offline trucco75

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Service a tempo
« Risposta #2 il: 13 Aprile 2011, 06:42:27 CEST »
0
Ciao , grazie.

Ho letto. :)

Ho visto degli esempi di app che ho scaricato. Molti per leggere un rss ogni tot utilizzano certamente l ' AlarmManager ma con differenze. Ti faccio vedere.
Codice (Java): [Seleziona]
haredPreferences settings = this.getSharedPreferences("myPref",0);
int period=AlarmManager.INTERVAL_FIFTEEN_MINUTES;
 
Intent updateIntent = new Intent();
 
updateIntent.setClass(this, Updater.class);
 
PendingIntent pendingIntent = PendingIntent.getService(this, 0, updateIntent, 0);
 
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,0,period,pendingIntent);

In questo modo viene chiamata la classe Updater.


In altri codici ho visto che si crea un BroadCastReceiver  e il PendigIntent viene usato con getBroadcast

Non capisco il senso di creare un BroadCastReceiver, registrarlo e attivarlo tramite un AlarmManager, basterebbe che ogni tot tempo venga chiamata una classe



Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service a tempo
« Risposta #3 il: 13 Aprile 2011, 10:07:10 CEST »
0
Se devi attivare solo un servizio allora va bene il codice che hai postato, ma se devi attivare più cose in contemporanea fai il receiver.

Un esempio proprio sul tuo lettore di RSS.
Il componente che si occupa dell'aggiornamento è un Service.
Mentre il componente che si occupa di visualizzare i feed una Activity.
Supponi anche di avere un Widget che visualizza i feed.

Scenario 1: l'AlarmManager attiva solo il Service.
Il service fa il suo lavoro di aggiornamento e tutto finisce qui.

Scenario 2: l'AlarmManager invia un Broadcast di tipo "Richiesto Aggiornamento"
Il service inizia l'aggiornamento.
L'activity se visibile visualizza la rondellina con "Aggiornamento feed in corso"
Il widget visualizza la scritta "Aggiornamento in corso"

Se devo essere sincero a me non piace lo Scenario 2, preferisco di gran lunga lo Scenario 1. Se vuoi ottenere le stesse feature dello Scenario 2 usando lo Scenario 1 allora fai che l'AlarmManager avvia il servizio ed il servizio, al suo avvio, invia il Broadcast.

Offline trucco75

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Service a tempo
« Risposta #4 il: 13 Aprile 2011, 11:02:47 CEST »
0
Quindi se posso usare questo thread anche per altre info...

1) attivo l' AlarmManager che ogni tot tempo chiama un Service

2) il Service recupera il feed e scrive il database

3) check del database se ci sono nuovi post attivo la notifica che lancia l' activity

3.1) se l' activity è aperta aggiorno...

Il BroadCastReceiver mi servirebbe solo se si deve fare più azioni diverse.

Per ricapitolare.

caso 1: AlarmManager->Pending Intent ->Service- Aggiornamento

caso 2: AlarmManager->Pending Intent ->BroadCastReceiver- (Aggiornamento + altre azioni)

La domanda che mi viene spontanea è se l' app appena installata non viene lanciata, l' AlarmManager devo richiamarlo dal Service ?


Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Service a tempo
« Risposta #5 il: 13 Aprile 2011, 11:32:15 CEST »
0
Se l'app non viene mai lanciata non parte l'AlarmManager punto e basta, io non gestisco situazioni di questo tipo, troppo estreme.