2011-09-15 18 views
18

La mia app utilizza SharedPreferences (con l'aiuto di PreferenceActivity) per memorizzare tutte le impostazioni. Ma a volte tutte le impostazioni vengono cancellate e tutti i valori sono impostati sui valori predefiniti. Principalmente su schede Android 3.x. Su normali smartphone non ci sono problemi.Le preferenze condivise vengono talvolta cancellate

Ho osservato che tutte le impostazioni vengono cancellate quando il processo di applicazione viene interrotto da Android. Ho notato questo perché l'icona di notifica non è più visualizzata. Mi chiedo anche perché il processo viene ucciso su tablet e non su smartphone. Sul mio smartphone l'icona di notifica non scompare mai.

La mia app ha anche un servizio, il processo principale e il servizio sia le impostazioni di lettura e scrittura su SharedPreferences. A volte ho notato che tutte le impostazioni vengono cancellate una volta che il servizio scrive su SharedPreferences. Ma non succede ogni volta.

Qualche idea? Mi rendo conto che SharedPreferences non deve essere utilizzato da processi diversi, ma funziona su tutti gli smartphone senza problemi!

+0

Per l'ultima frase: Attività e servizio vengono eseguiti nello stesso processo. Sono solo diversi componenti della stessa applicazione. –

+0

Ho notato che anche SharedPreferences viene cancellato su alcuni telefoni. Non sono stato in grado di inchiodare al 100% ciò che sta causando. Ma sto solo passando a un nuovo modello di archiviazione dei dati come potenziale soluzione. – FoamyGuy

+0

@mice: sei sicuro? Perché in LogCat hanno pid diversi (id processo) – almisoft

risposta

2

SharedPreferences di solito funziona alla grande e come hai detto senza alcun problema sugli smartphone. Dovrebbe funzionare anche su tablet. Tuttavia sarebbe meglio usare sqlite o eseguire il backup delle preferenze condivise su un server per ogni perdita di dati dell'ID degli utenti è un problema.

+0

Grazie mille per il vostro rapido asnwer.Ma questa è solo una soluzione. E non è applicabile per il mio PreferenceActivity, perché questa attività funziona solo con SharedPreferences ... – almisoft

19

Ho scoperto il motivo per cui le impostazioni scompaiono: Se due processi scrivono dati su SharedPreferences, può accadere che tutte le SharedPreferences vengano reimpostate sui valori predefiniti. Nel mio caso tutte le impostazioni vengono cancellate quando il servizio scrive i primi dati su SharedPreferences.

Ora il servizio fornisce solo l'accesso in lettura a SharedPreferences. Le impostazioni alle quali si accede da entrambi i processi di scrittura sono memorizzate in un database.

+0

Ha risolto il problema? Non l'hai segnato .. –

+0

dopo aver rimosso l'accesso alle preferenze condivise da un servizio ho trovato che il problema era risolto – vallllll

3

Ho avuto lo stesso problema. Tutti i valori delle preferenze condivise diventano predefiniti se un valore viene scritto occasionalmente con key = null. Ciò è possibile quando crei nuove costanti usando Eclipse, che di default è Null, e poi ti sei dimenticato di andare all'inizio della classe e di cambiare costante con un valore significativo. Se si continua a utilizzare l'app, l'operazione di lettura delle preferenze condivise restituirà valori validi. Ma quando il contesto viene modificato (ad esempio, quando l'attività viene uccisa da Android e ricreata) tutti i valori delle preferenze condivise restituiscono valori predefiniti (zero).

Quindi controlla le chiavi delle preferenze condivise! Spero che questa risposta aiuti qualcuno.

Problemi correlati