Autore Topic: RSS Reader  (Letto 847 volte)

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
RSS Reader
« il: 24 Maggio 2012, 18:41:01 CEST »
0
Salve,

sto realizzando un RSS Reader e ho un domanda da porvi.
Il mio Reader deve essere in grado di aggiornare in background ogni tot di tempo stabilito dall'utente ma anche aggiornare tramite un bottone.

quindi pensavo di usare un ScheduledExecutorService per l'aggiornamento il quale viene lanciato da un Service però non so se è il modo migliore per agire e poi non so come implementare l'aggiornamento istantaneo tramite bottone anche perché ci sarebbero problemi di sincronizzazione qual'ora lo Schedule precedente fosse attivo...i problemi di sincronizzazione sono capace di risolverli ma vi chiedo quale fosse il modo migliore secondo voi di agire.

grazie.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:RSS Reader
« Risposta #1 il: 24 Maggio 2012, 21:04:32 CEST »
+1
Ciao,
per le schedulazioni Android mette a disposizione l'AlarmManager [http://developer.android.com/reference/android/app/AlarmManager.html].

Io implementerei un Service che (in un thead separato) scarichi le nuove info con gli intervalli schedulati, le memorizzi a db e lanci un broadcast per avvisare le componenti interessate che i dati sono disponibili. Ogni componente ne farà l'uso che deve (il widget si aggiornerà in ogni caso, l'activity solo quando è visibile, ecc...).
Il bottone non farebbe altro che fare le veci dell'AlarmManager: ovvero lanciare il Service, il quale broadcasta ecc come sopra. In questo modo puoi anche evitare i problemi di sincronizzazione: il Service può indicare a livello Application che è in esecuzione, e ogni volta che viene lanciato può controllare che il tutto non sia già in moto ed evitare di lavorare.

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:RSS Reader
« Risposta #2 il: 24 Maggio 2012, 22:46:17 CEST »
0
Ciao,
per le schedulazioni Android mette a disposizione l'AlarmManager [http://developer.android.com/reference/android/app/AlarmManager.html].

Io implementerei un Service che (in un thead separato) scarichi le nuove info con gli intervalli schedulati, le memorizzi a db e lanci un broadcast per avvisare le componenti interessate che i dati sono disponibili. Ogni componente ne farà l'uso che deve (il widget si aggiornerà in ogni caso, l'activity solo quando è visibile, ecc...).
Il bottone non farebbe altro che fare le veci dell'AlarmManager: ovvero lanciare il Service, il quale broadcasta ecc come sopra. In questo modo puoi anche evitare i problemi di sincronizzazione: il Service può indicare a livello Application che è in esecuzione, e ogni volta che viene lanciato può controllare che il tutto non sia già in moto ed evitare di lavorare.

grazie per la risposta...ma mi potresti postare un po di codice giusto da capire meglio come funziona..te ne sarei grato

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:RSS Reader
« Risposta #3 il: 24 Maggio 2012, 23:48:19 CEST »
+1
Per quanto riguarda la schedulazione le possibilità sono molte.
In generale si definisce un PendingIntent da passare all'AlarmManager, e a seconda del metodo utilizzato tale PendingIntent può essere schedulato dopo un tot di tempo, ad un istante preciso oppure in loop, e con diverse altre modalità.

Ti posto un esempio di un vecchio progetto, ma sottolineo che le possibilità, come gli scenari, sono molteplici. Fai riferimento alla documentazione ufficiale che è molto completa.

             
Codice (Java): [Seleziona]
 
                //Recupero il servizio AlarmManager
                AlarmManager am = (AlarmManager) context(*).getSystemService(Context.ALARM_SERVICE);
               
                Intent i = new Intent(context, MyService.class);
                //eventuali action, extras, ecc...

                //Inizializzo il pendingintent da lanciare
                PendingIntent service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
               
                //Setto il prossimo allarme
                am.set(AlarmManager.RTC, timeToFire, service);

(*) dove context è un'istanza di Context o una sua sottoclasse (Activity, Service...ecc)
« Ultima modifica: 25 Maggio 2012, 09:37:35 CEST da DarnellNajanReed »

Offline Marcofe

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Ubuntu 11.10
Re:RSS Reader
« Risposta #4 il: 19 Ottobre 2012, 19:00:50 CEST »
0
Ciao a tutti,
il messaggio è un pò vecchio ma provo lo stesso a porti questa domanda:
Se volessi usare l'AlarmManager in modalità loop come dovrei fare?

Grazie :)

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:RSS Reader
« Risposta #5 il: 19 Ottobre 2012, 19:24:49 CEST »
0
Dalla docu ufficiale della classe AlarmManager:

Codice (Java): [Seleziona]
public void setRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int, long, long, android.app.PendingIntent)