DataStore- und Injektionsabhängigkeit von Simona Stojanovic Android-Entwickler Februar 2022

In den nächsten Beiträgen von uns Jetpack DataStore-ReiheWir behandeln einige zusätzliche Konzepte, um zu verstehen, wie DataStore mit anderen APIs kommuniziert, damit Ihnen alles zur Verfügung steht, was Sie verwenden können Produktionsumfeld. In diesem Beitrag konzentrieren wir uns auf Einspritzabhängigkeiten sind Griff. Wir verweisen auf Datenspeicher Einstellungen ich Proto codelabs durch diesen Beitrag für Codebeispiele.
In diesen Code-Labs haben wir mit unseren DataStore-Instanzen kommuniziert Einstellungen ich Proto Baudelegierter einmal auf der höchsten Ebene der Kotlin-Datei. Dann würden wir dieselbe Instanz in Ihrer gesamten Anwendung als verwenden Einzelling:
Wir brauchen einen Singleton für die Erstellung mehr als eine Instanz aus dem DataStore für eine bestimmte Datei kann alle DataStore-Funktionen beschädigen. In einer Produktionsumgebung würden wir jedoch normalerweise eine DataStore-Instanz per erhalten Injektionsabhängigkeit. Schauen wir uns also an, wie der DataStore mit arbeitet Griffeine Suchtinjektionsbibliothek, um uns zu helfen Standard reduzieren manuelles Abhängigkeitsmanagement. Wenn Sie mit Hilt nicht vertraut sind, empfehlen wir Ihnen, es zuerst durchzugehen Verwenden Sie Hilt in Ihrer Android-App Codelab zum Erlernen grundlegender Konzepte wie z Components
, Modules
und andere.
Griff platzieren
Stellen Sie zunächst sicher, dass Sie alle erforderlichen Einrichtungsschritte hinzugefügt haben, um Hilt zu aktivieren:
Alle Anwendungen, die Hilt verwenden, müssen enthalten Application
Klasse mit gekennzeichnet @HiltAndroidApp
zum Ausführen der Hilt-Codegenerierung, einschließlich der Basisklasse für Ihre Anwendung, die als Abhängigkeitscontainer auf Anwendungsebene dient. In unserem Fall erstellen wir eine einfache TasksApp
und füge es unserem hinzu AndroidManifest.xml
:
DataStore-Einstellungen einfügen
Um ein zu erhalten Einstellungen für DataStore-Instanzen Durch die Injektion müssen wir Hilt sagen, wie man es richtig herstellt. Wir gebrauchen PreferenceDataStoreFactory
und füge es hinzu ua Handlaufmodul:
Wir haben diese Parameter bereits in der Serie erwähnt, aber fassen wir schnell zusammen:
corruptionHandler
(optional) – aufgerufen, wenn aCorruptionException
wird vom Serialisierer ausgeworfen, wenn Daten nicht deserialisiert werden können, und gibt dem DataStore Anweisungen zum Ersetzen beschädigter Datenmigrations
(optional) – ListeDataMigration
vorherige Daten in den DataStore zu verschiebenscope
(optional) – das Ausmaß, in dem IO-Operationen und Transformationsfunktionen durchgeführt werden; in diesem Fall verwenden wir wieder gleichen Bereich wie die standardmäßige DataStore-APIproduceFile
– erzeugtFile
Objekt für Preferences DataStore basierend auf geliefertContext
ichname
darin gespeichertthis.applicationContext.filesDir
+datastore/
Unterverzeichnisse
Jetzt, da wir ein Modul haben, das Hilt anweist, wie wir unseren DataStore erstellen, müssen wir noch ein paar Anpassungen vornehmen, damit wir erfolgreich bauen können.
Hilt kann Abhängigkeiten zu anderen Android-Klassen bereitstellen, die sie haben @AndroidEntryPoint
Hinweis, zusammen mit @HiltAndroidApp
Pro Application
ich @HiltViewModel
Pro ViewModel
Klassen. Wenn Sie die Android-Klasse mit markieren @AndroidEntryPoint
, dann müssen Sie auch andere Android-Klassen markieren, die davon abhängen. Wenn Sie zum Beispiel a notieren Fragment
dann müssen Sie auch alle Aktivitäten markieren, bei denen Sie es verwenden Fragment
.
Das bedeutet, dass wir Folgendes hinzufügen müssen:
Wir haben keine anderen in dieser Probe komplexe Injektionen, wie benutzerdefinierte Builder, Factorys oder Schnittstellenimplementierungen. Wir können uns also auf Hilt und die Konstruktorinjektion für alle anderen Abhängigkeiten verlassen, die wir durchlaufen müssen. Wir werden verwenden @Inject
ein Hinweis im Klassenkonstruktor, um Hilt anzuweisen, wie seine Instanzen bereitzustellen sind:
Lassen Sie uns es schließlich vollständig loswerden preferencesDataStore
ein Delegierter von der Spitze von uns TasksActivity
da wir es nicht mehr brauchen. Wir werden auch die Art und Weise ändern, wie es uns gehört viewModel
ist vorgesehen TaskActivity
onCreate
denn seine Abhängigkeiten werden nun eingefügt:
Proto DataStore einfügen
Proto-DataStore würde einem sehr ähnlichen Muster folgen – Sie sollten zusätzlich sicherstellen, dass a UserPreferencesSerializer
und genaue Anweisungen zur Migration von SharedPreferences
auf die wir näher eingegangen sind Proto DataStore-Beitrag:
Das ist es! Sie können die App jetzt ausführen und überprüfen, ob alle Abhängigkeiten jetzt korrekt eingefügt wurden.
Wir haben die Schritte weiter abgedeckt wie man DataStore mit Hilt injiziert für ein besseres Suchtmanagement, Hilta-Setup, verwenden PreferenceDataStoreFactory
in unserer DataStoreModule
um Hilt anzuweisen, wie unsere DataStore-Instanz ordnungsgemäß gesichert wird, und um sie schließlich den Klassen zur Verfügung zu stellen, die dies benötigen.
Begleiten Sie uns für den nächsten Beitrag aus unserer Serie, in dem wir untersuchen, wie man es verwendet Data Warehouse mit Kotlin-Serialisierung.