Autore Topic: SharedPreference & TaskKill  (Letto 239 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 373
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
SharedPreference & TaskKill
« il: 27 Marzo 2017, 09:37:36 CEST »
0
Ho una Activity con una RecyclerView e se l'utente seleziona una o più righe salvo le righe preferite nelle SharedPreference; sulle righe ho un checkbox, su questo ho un listenter (setOnClickListener) e quando viene spuntato eseguo un metodo che invoca la edit delle SharedPreference ed esegue una apply().

Se dall'App esco con il back al rientro mi trovo nelle SharedPreference le righe che avevo salvato. Se dall'App invece che uscire normalmente faccio home e poi dalle App recenti in memoria la cancello quando rientro nelle SharedPreference non ho più le mie righe salvate!  :-o

Avete idee in merito perché non viene mantenuto il valore delle SharedPreference?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 836
  • Respect: +185
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:SharedPreference & TaskKill
« Risposta #1 il: 27 Marzo 2017, 12:17:56 CEST »
0
Molto interessante.

Dammi qualche dettaglio: se fai home + kill perdi anche le preferences che in precedenza erano state salvate? oppure solo le modifiche fatte prima di home + kill?

Post unito: [time]27 Marzo 2017, 12:32:36 CEST[/time]
Mi viene in mente un particolare: ".apply()" è asincrono, e potrebbe darsi che la sua elaborazione non sia stata completata quando killi l'applicazione, di conseguenza si perdono le modifiche effettuate.

Per risolvere potresti usare un ".commit()" nella "onPause" per assicurarti che tutte le modifiche siano salvate:

Citazione
If another editor on this SharedPreferences does a regular commit() while a apply() is still outstanding, the commit() will block until all async commits are completed as well as the commit itself.
« Ultima modifica: 27 Marzo 2017, 12:33:05 CEST da Ohmnibus, Reason: Merged DoublePost »
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline wlf

  • Utente normale
  • ***
  • Post: 373
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:SharedPreference & TaskKill
« Risposta #2 il: 27 Marzo 2017, 13:50:43 CEST »
0
Colpa mia! :(

Non ho scritto che sotto in background ho un processo che aggiorna sempre la RecyclerView (aggiunge righe o corregge quelle esistenti). Oltre a notificarlo all'adapter, andavo sempre a modificare la riga dei preferiti, quindi aggiornavo le SharedPreference molto frequentemente (più volte al secondo).

Non tutte le volte che cancellavo il task avevo il comportamento segnalato; se capitavo in un momento che non arrivavano aggiornamenti magari mi andava bene e ritrovavo i preferiti! ;)

Adesso ho modificato il codice in modo che mi aggiorna i preferiti solo se un dato degli stessi è stato aggiornato, non quando arriva qualsiasi altro dato. Praticamente può capitare una volta ad ogni lancio dell'App, non decine di volte al secondo! ;)