Qual é o bom mecanismo para armazenar informações entre o banco de dados SQLite e as Preferências Compartilhadas?
Por que usar preferências compartilhadas? Por que usar o sqlite? Tentei encontrar a diferença entre eles e qual é o melhor mecanismo para armazenamento de dados, mas não consigo encontrar a resposta apropriada no Google. Por favor me ajude com exemplos e explicações.
Respostas:
Realmente depende dos dados que você deseja armazenar.
SQLite
Grandes quantidades dos mesmos dados estruturados devem ser armazenados em um banco de dados SQLite, pois os bancos de dados são projetados para esse tipo de dados. Como os dados são estruturados e gerenciados pelo banco de dados, eles podem ser consultados para obter um subconjunto dos dados que corresponda a determinados critérios usando uma linguagem de consulta como SQL. Isso torna possível pesquisar nos dados. É claro que gerenciar e pesquisar grandes conjuntos de dados influencia o desempenho, portanto, a leitura de dados de um banco de dados pode ser mais lenta do que a leitura de dados de Preferências Compartilhadas.
Preferências Compartilhadas
SharedPreferences é um armazenamento de chave / valor em que você pode salvar dados sob determinada chave. Para ler os dados da loja, você precisa conhecer a chave dos dados. Isso facilita a leitura dos dados. Mas, por mais fácil que seja armazenar uma pequena quantidade de dados, é difícil armazenar e ler grandes dados estruturados, pois você precisa definir a chave para cada dado, além disso, você não pode realmente pesquisar nos dados, a menos que tenha um certo conceito para nomeando as chaves.
fonte
Esta pergunta tem uma resposta aceita, mas acho que há mais a ser dito sobre o assunto - em relação à velocidade.
As SharedPreferences de um aplicativo e o Sqlite DB são apenas arquivos, armazenados nos diretórios do aplicativo no sistema de arquivos do dispositivo. Se a quantidade de dados não for muito grande, a opção Sqlite envolverá um arquivo maior e mais complicado, com mais sobrecarga de processamento para acesso simples.
Portanto, se a natureza dos dados não ditar sua escolha (como explicado na resposta aceita) e a velocidade for importante, provavelmente será melhor usar SharedPreferences.
E a leitura de alguns dados geralmente está no caminho crítico para a exibição da atividade principal, então acho que a velocidade geralmente é muito importante.
Um pensamento final sobre velocidade e eficiência - se você precisar usar um banco de dados Sqlite para alguns dados estruturados, provavelmente será mais eficiente também armazenar as preferências do usuário no banco de dados para não abrir um segundo arquivo. Essa é uma consideração bastante pequena - provavelmente vale a pena considerar apenas se você precisar acessar os dados estruturados e as preferências antes de poder exibir a atividade principal.
fonte
Minha opinião é que não se trata de velocidade ou tamanho, mas do tipo de operação que você deseja executar nos seus dados.
Se você pretende fazer juntar-se , tipo , e outras operações de banco de dados sobre seus dados, em seguida, ir para SQLite . Um exemplo é a classificação de dados por data.
Se você deseja mapear valores simples (como int, booleano, String), use Preferências . As operações de banco de dados não funcionarão aqui e é desnecessário dizer que você precisa ter todas as chaves. Um exemplo é a senha do usuário ou a configuração do aplicativo.
A grande tentação de adotar as Preferências é quando você deseja usá-lo para armazenar um POJO achatado (um objeto JSON serializado) como String. Ter essa necessidade é realmente o sinal para usar o Sqlite. Por quê ? Porque dados complexos eventualmente precisarão de operações complexas. Imagine recuperar uma entrada específica que poderia ser manipulada por um simples "SELECT ... WHERE id = 1". No caminho Preferências, esse será um processo longo, desde a desserialização até a iteração dos resultados.
fonte
SharedPreferences
chaves / valores de uma só vez (por exemplo, as teclasuser
epassword
), para ter certeza de que ambas as teclas estão desmarcadas ou estão definidas.Para armazenar uma grande quantidade de dados, vá para o sistema de banco de dados SQLite. Isso permitirá que o usuário procure dados também.
Por outro lado, para armazenar uma pequena quantidade de dados, vá para Preferências compartilhadas. Nesse caso, um enorme sistema de banco de dados é desnecessário. Isso permitirá que o usuário salve os dados e carregue-os.
fonte
Esqueça o SQLLite, esqueça as SharedPreferences, use Realm. Uma solução única para todo o seu armazenamento local. Você pode usar objetos Java antigos simples como RealmObjects e armazenar seus dados lá. Você pode converter consultas selecionadas em arquivos JSON. Não há necessidade de analisar toda a base de dados. Verifique este link: https://realm.io/news/introducing-realm/
fonte