Mi chiedo quali strategie altri usano per evitare la perdita di dati durante il salvataggio di file su Android. Ho un paio di app di gioco che, essenzialmente, salvano potenzialmente lo stato/il salvataggio del gioco ogni volta che l'utente fa una pausa (onPause).Evitare la perdita di dati dovuta all'interruzione durante il salvataggio dei file su Android?
Questo funziona nel 99,99% dei casi, ma ogni tanto ricevo un esempio di salvataggio in cui il processo di salvataggio è andato storto. Di solito, questo è un file XML mal formato, tipicamente troncato in un punto arbitrario. Sulla base delle segnalazioni di bug che ricevo, credo che il problema si verifica soprattutto quando l'utente viene interrotto durante il gioco da una telefonata o qualcosa del genere e il sistema operativo Android uccide l'app prima che possa terminare il salvataggio. Il codice per il salvataggio dei file è piuttosto semplice, quindi ho difficoltà a vedere quale altro potrebbe causare questo problema.
Questo è un problema serio, perché di solito porta a rovinare i progressi di salvataggio del giocatore.
Stavo pensando di scrivere prima su un file vuoto, e poi copiare sul file "reale" solo dopo, ma sospetto che ciò aumenterebbe semplicemente il problema poiché in generale ci vorrà più tempo e rischia ancora di essere interrotto.
Chiunque abbia un modo sicuro di fare ciò con Android è relativamente garantito da non rovinare?
Così riassunto, le opzioni suggerite finora (come li capisco):
- utilizzare un servizio per il processo di salvataggio, sul presupposto che questo sarà meno probabilità di essere uccisi dal OS.
- Salva nel file temporaneo; copia su quando il salvataggio è verificato.
- Salvataggio incrementale dello stato del gioco (in realtà lo utilizzo già per le informazioni del registro del lettore).
- Combinazione di 2 & 3.
- Spostare il salvataggio su un altro thread, poiché il problema potrebbe essere con ANR uccide [commenti DC in basso].
Non credo che SharedPreferences funzionerà per questo tipo di dati strutturati. Al momento, nessuno di questi metad mi sembra una soluzione ideale, quindi sono ancora aperto a suggerimenti.
non ho ancora riuscito a testare tutti questi approcci, così piuttosto che sprecare la generosità, ho assegnato alla risposta che mi sento sarebbe più probabilità di risolvere il problema. Ho intenzione di verificare ancora le varie opzioni, prima di accettare una risposta. Grazie per tutti i buoni suggerimenti.
È troppi dati da salvare in 'SharedPreference'? – Ronnie
Sì - circa 20K di dati in XML. potrebbe non essere un grosso problema (non ho provato), ma la struttura piuttosto complessa dei dati sarebbe, credo. –
Come stai salvando lo stato del gioco in 'onPause()'? Stai facendo I/O sul thread principale (UI)? Dove stai salvando lo stato del gioco (su scheda SD o altra posizione)? –