Já fiz programação de banco de dados SQLite para Android, mas não sei nada sobre o Provedor de Conteúdo, exceto isto: "Como mencionei a página do desenvolvedor Android, o Android SDK explicou sobre o" Provedor de conteúdo ", pois é usado para armazenar e recuperar dados."
Mas então,
- Qual é a diferença exata entre "Content-Provider" e "SQLite Database"?
- Qual é o melhor para armazenar dados, quando?
Qualquer exemplo ou ajuda !!
fonte
ContentProvider
é uma fachada - uma API que você pode implementar que expõe bancos de dados a outros processos. Ele pode ser implementado de uma forma onde os dados são armazenados em um banco de dados SQLite, mas ele não tem que ser.Isso é impossível de responder em abstrato. De modo geral, a menos que algo exija que você use um
ContentProvider
, apenas use um banco de dados.fonte
Eu fiz muitos aplicativos bons com milhares de usuários usando-os, que simplesmente usavam métodos SQLite. Mas isso foi há um tempo e eu tive que escrever manualmente muitos códigos que agora podem ser facilmente tratados pelo ContentProvider. Naquela época, eu não era a favor do uso de provedores de conteúdo porque parecia apenas adicionar complexidade ao código.
No entanto, nos últimos dois anos, conforme o Android evoluiu, mudei para ContentProvider, pois ele economiza tempo e permite que você faça muito mais. Agora eu o uso extensivamente. Depois de escrever uma classe de Provedor de Conteúdo, sua vida se torna muito mais fácil. Com ContentProvider posso lidar muito facilmente com Cursor Loaders, Loader Callbacks e Bulk Inserts para os quais eu tive que escrever tudo manualmente no passado e ainda não funcionou tão eficientemente. Especialmente ao atualizar a exibição de lista, que agora é atualizada automaticamente graças a apenas um método notchange (). Isso significa que agora não preciso digitar meus próprios ouvintes e atualizar manualmente o conteúdo em visualizações de lista e adaptadores. Além disso, não preciso me preocupar em abrir e fechar bancos de dados ou me preocupar com vazamentos de memória. Tudo isso é tratado pelo Provedor de Conteúdo. O único problema que enfrento de vez em quando é que você não pode fazer algumas consultas complexas em ContentProviders. Neste caso, você ainda pode usar consultas brutas e usar a interação manual antiquada com sqlite.
Se você já escreveu seu próprio DbAdapter, Helper e Observer, pode carregá-los com segurança para seus novos aplicativos sem perder tempo convertendo tudo para ContentProvider. Mas, com base na minha experiência, eu recomendo mudar para ContentProvider. Vai levar algum tempo para se acostumar com isso, mas assim que você tiver experiência, você vai continuar.
ATUALIZAÇÃO 2017 Agora mudei para o Realm , uma maneira muito melhor de usar bancos de dados em qualquer plataforma. Passe algumas horas aprendendo e economize incontáveis horas em sua carreira de desenvolvimento de aplicativos.
fonte
1. Provedores de conteúdo não são seguros para threads
Por padrão, os provedores de conteúdo não são seguros para threads. Se você tiver vários threads usando um provedor de conteúdo, poderá ver muitas exceções diferentes sendo lançadas e outras inconsistências de dados. A maneira mais fácil de corrigir isso é usar a palavra-chave synchronized em cada um dos métodos públicos expostos pelo provedor de conteúdo.
Dessa forma, apenas um encadeamento por vez pode acessar esses métodos.
2. Jogue bem ao fazer muitas gravações
Tenho a necessidade no novo aplicativo Serval Maps de importar dados de arquivos binários para o banco de dados usado internamente pelo aplicativo. Para fazer isso e jogar bem com o resto do aplicativo, é melhor:
Gerar um novo encadeamento para realizar a importação para que outros encadeamentos não sejam afetados negativamente, em particular o encadeamento encarregado de atualizar a IU; e Faça uma breve pausa no final de cada importação para dar mais chance aos outros threads que precisam usar os métodos sincronizados.
3. Provedores de conteúdo forçam você a pensar lateralmente às vezes
A maneira como os provedores de conteúdo funcionam no Android é fornecer uma camada de abstração entre o restante do seu código e o banco de dados subjacente. Isso se deve principalmente ao fato de que, até onde sei, os provedores de conteúdo podem acessar dados de outros lugares que não bancos de dados.
Isso significa que você não pode executar consultas SQL brutas no banco de dados subjacente e precisa especificar os vários componentes de uma consulta SQL usando variáveis passadas para os vários métodos, como o método de consulta. Se você tem uma tarefa que não se encaixa na maneira como o SQL é tratado por um provedor de conteúdo, você tem duas opções:
Pense lateralmente sobre a consulta, talvez você possa obter os dados de que precisa por meio de consultas alternativas e acessando os resultados com o cursor; e Use um URI para acessar os dados normalmente e um URI especial que corresponda a uma consulta específica para as tarefas que não têm alternativas.
fonte
Provedores de conteúdo são usados quando você deseja compartilhar seus dados entre aplicativos.
Se você tem um banco de dados anexado a um aplicativo e deseja que outro aplicativo use alguns dados, você pode implementar um provedor de conteúdo que expõe os dados
fonte
A principal diferença é: quando seu aplicativo precisa compartilhar informações com outros aplicativos, use o provedor de conteúdo. SQLite apenas dados de armazenamento para o aplicativo que os cria
fonte
Eu li esta resposta enquanto procuro a mesma dúvida, então pensei em compartilhá-la. afirma -
Portanto, usar um provedor de conteúdo seria uma boa ideia.
fonte
Pense em sistemas avançados de gerenciamento de conteúdo. Cada objeto (página, imagem, artigo de notícias, item de evento, etc.) tem um conteúdo, um endereço, permissões de usuário e maneiras de interagir com ele de diferentes partes do sistema. Provedores de conteúdo fazem isso para Android. Agora você pode compartilhar arquivos ou imagens que possa ter armazenado em seu aplicativo. Você também pode criar objetos compartilháveis personalizados, como contatos comerciais, notas editáveis, etc. E especificar a segurança e o aplicativo padrão para lidar com esse objeto ao abri-lo em qualquer outro aplicativo.
fonte
Uma diferença é que os Provedores de Conteúdo têm suporte de plataforma para Observadores de Conteúdo. Você precisará implementar seu próprio padrão Observable para um banco de dados SQLite.
Como consultar novamente automaticamente com LoaderManager
ContentObserver para SQLite?
fonte