J'utilise la chambre dB dans mon application et mon code ressemble à ceci -
Ceci est mon code de repo - p> Ceci est mon code DAO - p> ceci fonctionne. p> Toutefois, lorsque je supprimai Totalement bien parce que j'essaie d'accéder à la chambre dB sur le fil principal. p> mais ma question est, avec Suspend code> Le mot clé " p>
suspendre code> et sans faire le commutateur de thread. .
withContext (Dispatchers.default) code>, comment ça marche? La chambre DB effectue-t-elle toutes ses opérations sur le thread de travailleur? P> p>
3 Réponses :
Vous devez définir allowMainThreadqueries () em> strong> au moment de la création d'une instance de classe de chambre
Je pense que ce n'est pas une bonne idée de faire des opérations de DB sur le fil principal. Cependant, j'ai trouvé un article qui explique ma question - Medium.com/androïddevelopers/room-coroutines-422B786DC4C5 < / a>. L'ajout de suspension à votre méthode DAO garantira que l'opération se produit sur le fil d'arrière-plan
Oui, mais dans votre cas si vous souhaitez utiliser sans suspendre signifie que l'accès dans le fil principal et si vous souhaitez accéder en arrière-plan que vous devez avoir à utiliser la suspension
Vous pouvez essayer ou p>
Oui, lorsque vous marquez la fonction sous forme de suspension, la salle exécute la requête dans un fil de fond / travailleur puis reprend la coroutine appelante avec les résultats (ou exception) lorsqu'il est fait.
Ce qui signifie que vous n'avez pas besoin de faire des trucs comme withContext (Dispatchers.io) {} code> et vous pouvez simplement appeler la fonction directement. P>
Si vous souhaitez que les questions soient exécutées sur le fil principal, ajoutez
.AlliceMainThreadQueries () code> Tout en bâtiment de la base de données
room.databasebuilder (this, myappDatabase :: class.java, "myappdatabase"). Autorisermainthreadqueries (). Construire () code> mais ce n'est pas recommandé. La place n'est donc pas juste limitée au fil de travailleurs
Puis-je vous demander pourquoi vous voulez utiliser votre DB le fil principal?
N'utilisez pas la transaction dB sur le fil principal