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.