Domanda

Sto sviluppando un'applicazione che invia periodicamente informazioni a un server esterno. Faccio una copia locale dei dati inviati, a fini di backup.

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

Qualche altra idea?

È stato utile?

Soluzione

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

Direi che l'opzione SQLite è più semplice. È possibile inserire una colonna della data nella tabella SQLite in cui sono archiviati i dati, il che rende molto semplice la rimozione di vecchi invii non più necessari e tutti gestiti tramite la libreria SQL nativa. Gestire un intero carico di file - o peggio un singolo file - con il tuo codice Java sarebbe molto più lavoro.

Inoltre, è possibile scrivere i dati nel database e dimenticarsene fino a quando non è necessario rileggerli. Se stai memorizzando dati in file, dovrai capire quando dovresti leggere e scrivere i file in termini in Ciclo di vita delle applicazioni Android . Se sei preoccupato per la batteria, probabilmente non vorrai scrivere i file più spesso di quanto dovresti e memorizzare nella cache i dati in memoria, ma dovrai assicurarti di non perdere dati quando l'app è in pausa o distrutta . Secondo me è molto più facile usare un database SQLite e non preoccuparti di nulla di tutto questo.

Altri suggerimenti

Non credo che importi se usi SQLite o un File, perché il db di SQLite è semplicemente un file sul sistema (archiviato in /data/data/<your_package>/databases/). Dovrai impegnarti nel db nei momenti giusti, proprio come avresti bisogno di salvare un file sul disco rigido al momento giusto. In altre parole, in un modo o nell'altro puoi usare altrettante scritture sul disco rigido.

Penso che ciò che scegli dipende maggiormente dal tipo di dati che stai salvando. Se hai bisogno dei poteri che può avere un db (come una query), usa sicuramente SQLite. Tuttavia, se non hai bisogno di un db, o hai dati che variano selvaggiamente (e non possono essere facilmente configurati in un database relazionale) allora andrei con i file.

Quello che posso dirti con certezza è che dovresti non utilizzare la serializzazione per salvare un file, se questa è la strada che scegli di seguire. 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.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top