Je pensais que pendant tout le temps où j'utilisais les éléments suivants, toutes les données pour la conversation de chat seront disponibles hors ligne à tout moment. Ce qui n'est pas le cas et tous les nœuds sont chargés à partir du serveur.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Ensuite, selon DOCS:
Comportement de persistance: en activant la persistance, toutes les données que nous synchronisons en ligne seront conservées sur le disque et disponibles hors ligne, même lorsque nous redémarrons l'application. Cela signifie que notre application fonctionnera comme elle le ferait en ligne en utilisant les données locales stockées dans le cache.
Si les données sont déjà disponibles hors ligne lorsque setPersistenceEnabled(true);
, pourquoi ai-je besoin de keepSynced(true)
?
DatabaseReference r = FirebaseDatabase.getInstance().getReference("chat/roomid");
r.keepSynced(true);
Le client Firebase Database de votre application peut conserver les données de la base de données à deux endroits: en mémoire et/ou sur disque.
Lorsque vous conservez un emplacement synchronisé, le client attache essentiellement un écouteur vide à cet emplacement. Ainsi, les données de l'application seront toujours à jour avec ce qui se trouve dans la base de données sur le serveur (tant qu'il y a une connexion réseau). Si vous n'avez pas activé la persistance, les données seront simplement mises à jour en mémoire. Si vous avez activé la persistance, elle sera également mise à jour sur le disque.
Bien qu'il soit plus courant d'utiliser keepSynced avec persistance, il existe également des cas d'utilisation sans persistance.
Par exemple, si vous avez une application maître-détail, où vous rebondissez fréquemment d'une liste de noms d'élément vers les détails de chaque élément. Dans ce cas, la synchronisation de la liste des noms d'élément vous évitera de devoir recharger ces données lorsque l'utilisateur reviendra de l'écran de détail.
Vous pouvez bien sûr également simplement garder un écouteur sur les données, ce qui est essentiellement ce que keepSynced fait en arrière-plan.
setPersistanceEnabled (true) Il stockera les données pour une utilisation hors ligne.
keepynced (true) par défaut, Firebase conserve 10 Mo de données en cache, si elle continue de croître, elle sera remplacée par de nouvelles données.
Selon documentation Firebase
Par défaut, le client Firebase conserve les données en mémoire pendant l'exécution de votre application, mais pas au redémarrage. En définissant cette valeur sur true, , les données seront conservées sur le périphérique (disque) stockage et seront donc être à nouveau disponible au redémarrage de l'application (même en l'absence de connectivité réseau à ce moment). Notez que cette méthode doit être appelée avant de créer votre première référence Firebase et ne doit être appelée qu'une seule fois par application. Si votre application utilise l'authentification Firebase, le client persistera automatiquement le jeton d'authentification de l'utilisateur pendant les redémarrages, même si la persistance n'est pas activée. Mais si le jeton d'authentification a expiré alors qu'il était hors ligne et que vous avez activé la persistance, le client suspendra les opérations d'écriture jusqu'à ce que vous vous authentifiiez à nouveau avec succès (ou appeliez explicitement unauth) pour empêcher que vos écritures soient envoyées non authentifiées et échouent en raison de règles de sécurité.
Notez qu'il indique que les données persisteront sur le disque et seront disponibles lorsque les applications redémarreront . Si vous regardez le cycle de vie d'une activité , vous verrez qu'une activité s'arrête lorsque vous passez à une autre activité. Ainsi, tant que votre application est ouverte et que l'utilisateur n'a navigué que vers d'autres activités, les données restent persistantes.
Mais ne dites rien sur la suppression de votre application et la persistance des données. C'est pourquoi vous avez besoin de keepSynced()
:
En appelant keepSynced (true) sur un emplacement, , les données de cet emplacement seront automatiquement téléchargées et synchronisées , même si aucun écouteur n'est attaché pour cela. emplacement. De plus, pendant qu'un emplacement est maintenu synchronisé, il ne sera pas supprimé du cache disque persistant .
Faites attention quand il dit "pendant que l'emplacement est synchronisé, il ne sera pas expulsé du cache disque persistant", cela signifie que si vous n'utilisez pas keepSynced(true)
vos données pourraient être vidées de manière lorsque l'application est tué/fermé.
Ainsi, pour conserver et continuer les données après la suppression de votre application, vous devez utiliser à la fois FirebaseDatabase.getInstance().setPersistenceEnabled(true);
et keepSynced(true)
.