android - setup - Firebase: Qual é a diferença entre setPersistenceEnabled e keepSynced?



firebase setup android (2)

De acordo com a documentação do Firebase

Por padrão, o cliente Firebase manterá os dados na memória enquanto o aplicativo estiver em execução, mas não quando for reiniciado. Ao definir esse valor como true, os dados serão mantidos no armazenamento no dispositivo (disco) e estarão disponíveis novamente quando o aplicativo for reiniciado (mesmo quando não houver conectividade de rede no momento). Observe que esse método deve ser chamado antes de criar sua primeira referência do Firebase e precisa ser chamado apenas uma vez por aplicativo. Se o aplicativo usar a autenticação Firebase, o cliente persistirá automaticamente o token de autenticação do usuário nas reinicializações, mesmo sem a persistência ativada. Mas se o token de autenticação expirar enquanto estiver off-line e você tiver ativado a persistência, o cliente pausará as operações de gravação até que você se autentique novamente (ou chame explicitamente de não-verdadeiro) para impedir que suas gravações sejam enviadas não autenticadas e com falha devido a regras de segurança.

Observe que ele diz que os dados persistirão no disco e estarão disponíveis quando os aplicativos reiniciarem . Se você observar o ciclo de vida de uma atividade , verá que uma atividade é interrompida quando você muda para outra atividade. Portanto, enquanto seu aplicativo ainda estiver aberto e o usuário navegar apenas para outras atividades, os dados permanecerão persistentes.

Mas não diga nada sobre como matar seu aplicativo e persistir dados. É por isso que você precisa do keepSynced() :

Ao chamar keepSynced (true) em um local, os dados desse local serão baixados automaticamente e mantidos em sincronia , mesmo quando nenhum ouvinte estiver conectado a esse local. Além disso, enquanto um local é mantido sincronizado, ele não será removido do cache de disco persistente .

Preste atenção quando diz "enquanto o local é mantido sincronizado, ele não será removido do cache de disco persistente", isso significa que se você não usar keepSynced(true) seus dados poderão ser liberados quando o aplicativo for keepSynced(true) / fechado .

Portanto, para persistir e continuar com os dados após a FirebaseDatabase.getInstance().setPersistenceEnabled(true); aplicativo, é necessário usar o FirebaseDatabase.getInstance().setPersistenceEnabled(true); e keepSynced(true) .

Pensei que o tempo todo, quando eu usasse os seguintes dados, todos os dados para conversação estivessem disponíveis offline a qualquer momento. O que de alguma forma não é e todos os nós são carregados do servidor.

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Então, de acordo com o DOCS:

Comportamento de persistência: ao ativar a persistência, todos os dados que sincronizamos enquanto estiver online permanecerão em disco e ficarão disponíveis offline, mesmo quando reiniciarmos o aplicativo. Isso significa que nosso aplicativo funcionará como se estivesse online, usando os dados locais armazenados no cache.

Se os dados já estarão disponíveis offline quando setPersistenceEnabled(true); , por que preciso do keepSynced(true) ?

DatabaseReference r = FirebaseDatabase.getInstance().getReference("chat/roomid");
r.keepSynced(true);

Answer #1

O cliente Firebase Database no seu aplicativo pode manter os dados do banco de dados em dois locais: na memória e / ou no disco.

  1. Quando você anexa um ouvinte, ele sincroniza os dados do banco de dados com uma representação na memória do seu aplicativo.
  2. Se você ativar a persistência, os dados também serão automaticamente persistidos no disco.
  3. Quando você desanexa o último ouvinte de um local, os dados desse local são liberados da memória. Mas não é excluído do disco.

Quando você mantém um local sincronizado, o cliente basicamente anexa um ouvinte vazio a esse local. Portanto, os dados no aplicativo sempre estarão atualizados com o que está no banco de dados no servidor (desde que haja uma conexão de rede). Se você não tiver ativado a persistência, os dados serão mantidos atualizados na memória. Se você ativou a persistência, ela também será mantida atualizada no disco.

Embora seja mais comum usar keepSynced com persistência, também existem casos de uso sem persistência.

Por exemplo, se você tiver um aplicativo de detalhes principais, você alterna frequentemente de uma lista de nomes de itens para os detalhes de cada item. Nesse caso, manter a lista de nomes de itens sincronizada evitará que você precise recarregar esses dados quando o usuário voltar da tela de detalhes.

Obviamente, você também pode simplesmente manter um ouvinte nos dados, que é essencialmente o que o keepSynced faz nos bastidores.





persistence