Autore Topic: sincronizzazione  (Letto 825 volte)

Offline giuseppe500

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
sincronizzazione
« il: 19 Novembre 2013, 17:12:23 CET »
0
Ciao,
Ho creato un web service rest tramite cui posso accedere a 6 url, ogni url corrisponde ai dati da aggiornare in ognuna delle mie tabelle da aggiornare .ritorno un json.

IL problema è :
Se utilizzo il client asincrono che mi è stato consigliato su questo forum posso accedere al db da tutti e 6 i thread?
voglio dire se uso un thread per ogni accesso ad un url tramite client  per popolare il db con delle stringhe sql e ho 6 url  e questi 6 thread accedono tutti al db in locale insieme posso avere dei problemi?
ho anche guardato l'esempio dell sdk SampleSyncAdapter per ispirazione e vedo che usa un meccanismo di caricamento di comandi e di esecuzione "bulk" ma non c'è nulla sul mio problema.

Inoltree potrei usare un servizio per la sincronizzazione  o vado incontro ad altri problemi?
ho letto che a volte i servizi sono distrutti dall os android, ma non ho capito bene, se va oltre le risorse necessarie...

grazie.
« Ultima modifica: 19 Novembre 2013, 18:04:15 CET da giuseppe500 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:sincronizzazione
« Risposta #1 il: 19 Novembre 2013, 18:42:54 CET »
0
Io farei una tabella alla volta. Non c'è nessuna ragione di implementare 6 thread in esecuzione parallela.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline giuseppe500

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
Re:sincronizzazione
« Risposta #2 il: 19 Novembre 2013, 19:11:17 CET »
0
Grazie bradipao.
ma se la libreria lavora in modo asincrono, come faccio ad "aspettare" che la prima tabella finisca l'aggiornamento?
e ad esserne certo?
devo lanciare un altro url alla fine della funzione callback che mi dice che ha finito e cosi via per tutte e sei le tabelle?
scusa ma sono un po duro.
ciao.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:sincronizzazione
« Risposta #3 il: 19 Novembre 2013, 19:35:45 CET »
0
Grazie bradipao.
ma se la libreria lavora in modo asincrono, come faccio ad "aspettare" che la prima tabella finisca l'aggiornamento?
e ad esserne certo?
devo lanciare un altro url alla fine della funzione callback che mi dice che ha finito e cosi via per tutte e sei le tabelle?
scusa ma sono un po duro.

Si, io farei esattamente come hai descritto. Ne lanci una, poi nella callback che chiude la prima, lanci la seconda e così via.

L'unica cosa che prenderei in considerazione è prevedere la possibilità di abortire l'update a metà (per connessione di rete caduta, spegnimento terminale, errori vari). La cosa in teoria è molto semplice da implementare:

Prima di lanciare l'update, annunci l'inizio di una transaction:
Codice (Java): [Seleziona]
mDB.beginTransaction();
Se riesci ad arrivare in fondo all'update, segnali di aver finito tutte le operazioni con successo:
Codice (Java): [Seleziona]
mDB.setTransactionSuccessful();
E in uscita dal codice, sia con successo che con errore, segnali la fine delle transaction:
Codice (Java): [Seleziona]
mDB.endTransaction();
Vediamo i due casi:
(1) l'update va male e quindi fai "begin" e "end", ma non successful: questo ha l'effetto di non eseguire nessuna delle operazioni sul database richieste tra begin e end.
(2) l'update va bene e quindi fai "begin" "successful" e "end": tutte le operazioni di update sul database vengono eseguite in blocco (quindi anche molto più velocemente).

In questo modo se per qualche ragioni l'update si interrompe a metà, il database non risulta "aggiornato a metà".
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline giuseppe500

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
Re:sincronizzazione
« Risposta #4 il: 19 Novembre 2013, 19:59:50 CET »
0
grazie.


Post unito: 19 Novembre 2013, 20:27:00 CET
solo una cosa, la transazione funziona anche con il contentprovider?
g
« Ultima modifica: 19 Novembre 2013, 20:27:00 CET da giuseppe500, Reason: Merged DoublePost »