2009-11-26 13 views
11

Sto sviluppando un'applicazione che invia periodicamente informazioni a un server esterno. Realizzo una copia locale dei dati inviati, a scopo di backup.Archiviazione dati Android - File vs SQLite

Qual è l'opzione migliore per memorizzare i dati in termini di risparmio della durata della batteria? Ogni invio di dati è un oggetto serializzato (la classe ha 5 campi, inclusa una data, numeri e stringhe) di circa 5K-10K.

Qualche altra idea?

risposta

13

Non ho idea in termini di durata della batteria direttamente, ma un criterio sarebbe più facile da gestire? Meno operazioni per gestire i dati significherebbe un minor numero di cicli della CPU e, a sua volta, una maggiore durata della batteria.

Direi che l'opzione SQLite è più semplice. Puoi inserire una colonna di date nella tabella SQLite che memorizza i tuoi dati, il che rende la rimozione di vecchi invii che non ti servono più molto facilmente - e tutti gestiti tramite la libreria SQL nativa. Gestire un intero carico di file - o peggio di un singolo file - con il proprio codice Java sarebbe molto più lavoro.

Inoltre, è possibile scrivere i dati nel database e dimenticarsene fino a quando non è necessario leggerli di nuovo. Se stai memorizzando i dati nei file, dovrai allenarti quando dovresti leggere e scrivere file in termini su Android application life cycle. Se sei preoccupato per la batteria, probabilmente non vorresti scrivere i file più spesso di quanto dovresti e memorizzi i dati nella memoria, ma dovresti assicurarti di non aver perso i dati quando la tua app è in pausa o distrutta . Secondo me è molto più semplice usare un database SQLite e non preoccuparsi di nulla di tutto ciò.

+0

Grazie per i vostri commenti, sembra molto ragionevole. Sai se il database è sempre in esecuzione in background (come un database tradizionale) o se è in esecuzione solo quando un'applicazione lo utilizza? Voglio dire, se il "server SQLite" (se tale processo esiste in Android) viene avviato solo a causa della mia applicazione ... forse non è una buona idea. –

+10

afaik sqlite è solo un file a cui si accede tramite le librerie, non è in esecuzione alcun server di database. – tosh

15

Non credo che importi l'uso di SQLite o di un file, perché SQLite db è semplicemente un file sul sistema (archiviato in /data/data/<your_package>/databases/). Dovrai impegnarti con il db al momento giusto, proprio come avresti bisogno di salvare un file sul disco rigido al momento giusto. In altre parole, in un modo o nell'altro è possibile utilizzare altrettante scritture sul disco rigido.

Penso che ciò che si sceglie dipenda più dal tipo di dati che si stanno salvando. Se hai bisogno dei poteri che un db può conferire (come l'interrogazione), usa in ogni caso SQLite. Tuttavia, se non hai bisogno di un db, o se hai dati che variano in modo selvaggio (e non possono essere facilmente configurati in un database relazionale), allora andrei con i file.

Quello che posso dirvi è che si dovrebbe non usare la serializzazione per salvare un file, se questa è la rotta che si sceglie di percorrere. La serializzazione Android è lenta, lenta, lenta e crea file di grandi dimensioni. È molto meglio scrivere il proprio formato XML o JSON per motivi di prestazioni.

4

La tua applicazione è multi-threaded? Se hai più thread che accedono all'archivio dati, andrei con SQLite. Lascia che SQLite si preoccupi dei problemi di blocco.

+0

Attenzione, SQLite non è thread-safe su alcune piattaforme (Xamarin) – nVentimiglia