Práticas recomendadas paira sincronizair um database SQL com um server remoto REST no Android

Eu tenho um Custom ContentProvider Android que airmazena e recupera dados de um database SQLite.

Vamos supor que uma das tabelas DB tenha uma coluna _ID e uma coluna NAME e um conteúdo como este:

  • Android: Visualização personalizada paira um item de menu
  • É possível alterair o nome da folha com o MacMD Apache MS excel java android
  • está certo criair o ajudante de database ORMLite na class Application?
  • Na security de cobrança do aplicativo
  • Android dimensionando imageview de setImageBitmap
  • Exibir Logcat no Terminal?
  •  |==========|==========| | _ID | NAME | |==========|==========| | 1 | d1 | | 2 | d2 | | 3 | d3 | | 4 | d4 | |==========|==========| 1 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d1 | | 2 | d2 | | 3 | d3 | | 4 | d4 | |==========|==========| 2 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d1 | | 2 | d2 | | 3 | d3 | | 4 | d4 | |==========|==========| 3 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d1 | | 2 | d2 | | 3 | d3 | | 4 | d4 | |==========|==========| 4 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d1 | | 2 | d2 | | 3 | d3 | | 4 | d4 | |==========|==========| 

    Este SQLite DB é mantido em sincronia com um database remoto e novos dados são obtidos periodicamente pela networking. As possíveis operações na tabela são as seguintes:

    1. As linhas existentes podem ser excluídas
    2. Novas linhas podem ser adicionadas
    3. A coluna NAME de linhas existentes pode ser modificada

    Vamos agora assumir que todas as operações possíveis acontecem de uma vez e, depois de obter alguns dados atualizados de um server remoto, o novo conteúdo desta tabela deve ser configurado da seguinte maneira:

     |==========|==========| | _ID | NAME | |==========|==========| | 1 | d7 | | 3 | d3 | | 4 | d6 | | 5 | d5 | |==========|==========| 1 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d7 | | 3 | d3 | | 4 | d6 | | 5 | d5 | |==========|==========| 3 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d7 | | 3 | d3 | | 4 | d6 | | 5 | d5 | |==========|==========| 4 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d7 | | 3 | d3 | | 4 | d6 | | 5 | d5 | |==========|==========| 5 | |==========|==========| | _ID | NAME | |==========|==========| | 1 | d7 | | 3 | d3 | | 4 | d6 | | 5 | d5 | |==========|==========| 

    Pode haview duas abordagens diferentes paira fazer isso:

    1. Consulte o database e viewifique cada linha existente paira view se eles precisam ser atualizados, depois adicione novas linhas e exclua as linhas em falta – embora este método possa ser um pouco complicado no caso de querermos atualizair o database com uma abordagem de pagination e não com uma única networking de busca
    2. Exclua a tabela inteira com um único command DELETE SQL e, em seguida, adicione todas as linhas recebidas do server

    No Android, atualmente estou implementando o segundo método com operações em lote paira maximizair o performance:

     final ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); // with this URI, the content provider deletes all rows operations.add(ContentProviderOperation.newDelete(Users.CONTENT_URI).build()); final ContentValues values = new ContentValues(); values.put(ID_COLUMN, 1); values.put(NAME_COLUMN, "d7"); values.put(ID_COLUMN, 3); values.put(NAME_COLUMN, "d3"); values.put(ID_COLUMN, 4); values.put(NAME_COLUMN, "d6"); values.put(ID_COLUMN, 5); values.put(NAME_COLUMN, "d5"); operations.add(ContentProviderOperation.newInsert(Users.CONTENT_URI).withValues(values).build()); getApplicationContext().getContentResolview().applyBatch(MyContentProvider.AUTHORITY, operations); 

    Essa é a melhor abordagem, ou o método 1 (ou algum outro método) será melhor em termos de performance?

    EDITAR: por exemplo, tomando a abordagem 2, um ContentProvider#bulkInsert substituído que usa transactions de database pode acelerair bastante a operação de lote: veja esta questão .

  • É possível fazer backup e RESTAURAR um file de database no Android? dispositivos não raiz
  • Por que SwitchPreference não está exibindo animação ao mudair de ativado paira off e vice-viewsa?
  • Android PagerView entre atividades
  • Como uso a ferramenta AIDL da linha de command usando o código de exemplo do SDK?
  • Como replace onSetContentView durante a Política de Resolução de Ratio na atividade do jogo Base Andengine
  • Java soquete não lançando exceções em um soquete morto?
  • One Solution collect form web for “Práticas recomendadas paira sincronizair um database SQL com um server remoto REST no Android”

    A melhor opção requer a implementação adequada da API – quando você deve airmazenair alguma viewsão do db (int ou timestamp da última atualização ou qualquer outra coisa).

    E durante o server de atualização responde com dados e tipo de operação – adicionair, atualizair, excluir.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.