Transkripte
1. Willkommen: Willkommen zum Kurs Dependency Injection auf Android
mit Health. Mein Name ist Garrett oder Hue. Ich entwickle seit 2013
Android-Anwendungen. In diesem Kurs lernen Sie, was Abhängigkeit ist, warum sie ein Problem sein kann
und wie Sie dieses Problem mithilfe der Abhängigkeitsinjektion lösen können. Sie werden lernen, wie Sie die
Dependency Injection mithilfe einer
Bibliothek namens Hilt implementieren . Außerdem werden wir mit Hilt eine
einfache
Wettervorhersageanwendung erstellen . Um an diesem Kurs teilnehmen zu
können, sollten Sie
mit der Android-Entwicklung vertraut sein. Wir werden die
Programmiersprache Kotlin verwenden. Ebenfalls. Sie sollten Android Studio
auf Ihrem Computer installiert haben. Wenn du bereit bist, lass uns den Kurs
beginnen.
2. Beispiel: Beginnen wir den Kurs
mit einem kurzen Beispiel für Abhängigkeit und
Abhängigkeitsinjektion. Hier werde ich
ein Beispiel für Abhängigkeit zeigen. Das ist die Motorklasse. Es hat eine Startfunktion, die
den Motor zum Starten bringt. Und wir haben die Fahrzeugklasse, die eine
Instanz des Motors erstellt. Und es hat eine Startfunktion, die
anzeigt, dass das Auto startet
und der Motor startet. Außerdem haben wir eine
Hauptfunktion, in der wir eine
Instanz des Autos erstellen und loslegen. Das Problem ist, dass
wir hier, in dieser Linie, Instanzen
des Motors im Auto erzeugen. In diesem Fall
ist Engine Abhängigkeit. Das Auto ist
auf Motorglas angewiesen. Wie können wir dieses Problem lösen? Es kann gelöst werden. Wenn wir eine Instanz
außerhalb der abhängigen Instanz erstellen, verschieben
wir sie zur Hauptfunktion und übergeben eine Instanz an das Auto. Jetzt analysieren wir die Instanz-Engine
mithilfe ihres Konstruktors in das Auto. Dies wird als
Dependency Injection bezeichnet. Lassen Sie uns diesen Code ausführen
und das Ergebnis sehen. Der Code funktioniert. Und das war ein kurzes
Beispiel dafür, was Abhängigkeit und
Abhängigkeitsinjektion sind.
3. Abhängigkeit: In diesem Video werden wir
sehen, was Abhängigkeit ist. Abhängigkeit tritt auf
, wenn eine Komponente von einer anderen Komponente abhängt. Beispielsweise
hängt eine Klasse von einer anderen Klasse ab. In diesem Beispiel erstellen wir Instanzen des Motors im Auto. Das Auto hängt also vom Motor ab. In diesem Fall ist Car abhängig,
Antigen ist Abhängigkeit. Sie können sagen, welche
Probleme mit der Abhängigkeit auftreten können. Das erste Problem wird Replikation
genannt. Wir erstellen eine
Instanz-Engine im Auto. Daher müssen wir möglicherweise an vielen Stellen solche
Instanzen erstellen. Dies führt zu einer
Code-Replikation. Ein weiteres Problem ist
die Wartbarkeit. Stellen Sie sich die Situation vor, Motoren
Funktionsketten konstruieren. Also müssen wir
den Code überall ändern , wo wir
Instanzen der Engine erstellen. Ein weiteres Problem ist das
Lifecycle Management. Hier erstellen wir Exemplare
des Motors im Auto. Das bedeutet, dass beim Entfernen des
Autos auch der
Motor entfernt wird. Diese Probleme können durch die Verwendung von
Dependency Injection
gelöst werden .
4. Dependency Injection: In diesem Video werden wir sehen,
was Abhängigkeitsinjektion ist. Dependency Injection ist das Erstellen und
Injizieren von Abhängigkeit. In diesem Beispiel erstellen wir
eine Instanz der Engine in Hauptfunktion und übergeben Konstruktorfunktion für
zwei Autos. Und das nennt man
Dependency Injection. Die Dependency Injection löst
Abhängigkeitsprobleme. Es ist eine Quellcode-Replikation,
indem Abhängigkeiten
an einem Ort erstellt werden. In diesem Beispiel
erstellen wir Instanzen von Engine in Hauptfunktion und
übergeben sie in das Autoobjekt. Wenn wir
seine Konstruktorfunktion ändern müssen, müssen
wir den
Code an einer Stelle ändern. Das verbessert also die
Wartbarkeit des Codes. Dependency Injection löst das Problem mit
Lifecycle Management. Hier erstellen wir
Instanzen des
Motors und des vorbeifahrenden Fahrzeugobjekts. Wenn das Auto also entfernt wird
und nicht entfernt wird, haben wir die Kontrolle
über den Lebenszyklus. Es gibt drei Arten der
Abhängigkeitsinjektion Konstruktor-, Feld
- und Methodeninjektion. Wie wir im
vorherigen Beispiel gesehen haben, wird eine
Abhängigkeit erstellt und an die
Konstruktorfunktion übergeben. Dies wird als
Konstruktorinjektion bezeichnet. Dieser Typ wird bevorzugt,
da wir die
Abhängigkeit privat machen können , um sie unveränderlich zu
machen. Ein anderer Typ ist die
gefüllte Injektion. In diesem Fall injizieren wir
Abhängigkeit in das Feld. Diese Art der Injektion wird verwendet, wenn der Konstruktor nicht verfügbar
ist. Beispiel ist das Android-System. Wir haben keine Kontrolle
über Android-Komponenten wie Aktivität, Fragment usw. Ein anderer Typ ist die
Methodeninjektion. Diese Art der Injektion wird verwendet , wenn wir keine
Kontrolle über den Konstruktor haben. Und wir wollen mehrere
Abhängigkeiten gleichzeitig einfügen.
5. Service Locator: In diesem Video werden wir
über Service Locator sprechen. Es gibt zwei Möglichkeiten, das Abhängigkeitsproblem zu
lösen. Der erste Weg ist die
Abhängigkeitsinjektion, bei der Abhängigkeiten in abhängige
injiziert werden. Um die
Abhängigkeitsinjektion zu implementieren, können
wir die Healed Library verwenden. Eine andere Möglichkeit, das
Abhängigkeitsproblem zu lösen , ist die
Abhängigkeitssuche, bei der Abhängigkeiten von außen
abgerufen werden. Sogenannter Service Locator
, der Abhängigkeiten
mit ihrem Namen zurückgibt. Lassen Sie mich ein Beispiel
für den Service Locator zeigen. Hier haben wir einen Glasmotor mit Funktion Stern, der die
Druckmaschine startet. Hier haben wir ein Objekt
namens Service Locator, das eine Instanz
von Engine und Funktion erstellt, die Abhängigkeiten
mit ihrem Namen zurückgibt. ZB gibt es eine Instanz der
Engine zurück , wenn der Name zwei Engines
entspricht. Wenn der Name nicht gefunden wird, wird eine ungültige
Argumentausnahme mit Nachrichtenabhängigkeit ausgelöst bei der der folgende Schlüssel in der Fahrzeugklasse
nicht gefunden wurde. Die Instanz der Engine
wird mithilfe der
Suchfunktion mit dem Engine-Schlüssel aus dem
Service Locator abgerufen . Dann zeigt die Startfunktion an,
dass das Auto startet und startet den Motor. In der Hauptfunktion
erstellen wir eine Instanz der Engine und nennen sie die
Startfunktion. Service Locator ist ein
entworfenes Muster ,
das den Zugriff auf das Objekt anhand seines Namens ermöglicht. Es ermöglicht, Objekte an
einem Ort zu erstellen und
sie anhand ihrer Namen zu ermitteln. Es löst das Abhängigkeitsproblem indem es eine Instanz
an einem Ort erstellt. Es gibt also keine Code-Anwendung. Es erzeugt auch
Abhängigkeit von außen. Eine Änderung der Abhängigkeit führt also nicht zu einer
Änderung der Abhängigkeit. Darüber hinaus ist
der Lebenszyklus der Abhängigkeit nicht an den Lebenszyklus
der Angehörigen gebunden. Service Locator wird
von einer Bibliothek namens Coin verwendet, die nicht in diesem Kurs behandelt wird.
6. Dolch und Hilt: Dagger and a Dagger ist eine
Dependency Injection Library, die die Implementierung
der Dependency Injection erleichtert. Es reduziert eine Menge Boilerplate-Code und
implementiert gleichzeitig die Dependency Injection. Q ist auch eine Dependency
Injection Library, die auf Dagger aufbaut
und die
Verwendung von Dolchen erleichtert. So funktioniert es. Dagger verwendet einen
Annotationsprozessor,
um den Code zu analysieren und zu identifizieren, wo Abhängigkeiten eingefügt werden sollen und welche Art von
Abhängigkeiten erforderlich sind. Dann generiert Dagger Quellcode , der vom Compiler kompiliert wird. Hier ist die Dependency
Injection Library, die auf Dagger basiert. Es ermöglicht,
weniger Code zu schreiben, da es
vordefinierte Container
für Android-Klassen hat,
was auch das Einfügen von
Abhängigkeiten
in das Viewmodel und das
Injizieren des View-Modells selbst erleichtert .
7. Code: Der Code für diesen Kurs ist unter der folgenden URL
verfügbar. Wenn Sie diese URL öffnen, finden
Sie das Code-Repository auf GitHub, das Code für eine
einfache
Wettervorhersageanwendung enthält . Um
dieses Repository zu klonen, klicken Sie auf Code, klicken Sie hier um die URL zu kopieren und Android Studio zu
öffnen. Klicken Sie in Android Studio auf Datei. Neues Projekt von der
Versionskontrolle. Fügen Sie hier die URL ein
, die wir kopiert haben. Und hier sollten Sie
das Verzeichnis festlegen , in dem Sie das Projekt
speichern möchten, und auf Klonen klicken. Nach dem Klonen des Codes können
Sie diese Anwendung
auf Ihrem Gerät oder Emulator ausführen.
8. Ohne Dependency Injection: In diesem Video werde ich
Code ohne
Abhängigkeitsinjektion zeigen . Öffnen wir Android Studio. Wir haben bereits
Code aus dem Repository geklont. Und jetzt sind wir in Master Branch. Wir müssen keine DI-Filiale
auschecken. Dieser Zweig enthält Code
ohne Abhängigkeitsinjektion. Öffnen wir zunächst
AndroidManifest.xml. Hier können wir sehen, dass es
eine Berechtigung für die
Internetverbindung hat und Klartext-Verkehr
verwendet, um die HTTP-Verbindung verwenden zu
können. Und wir haben einen Bildschirm
namens Prognoseaktivität. Im Rahmen der Prognoseaktivitäten erstellen
wir anhand der Basis-URL Nachrüstungen. Und wir stellen unsere
JSON-Konverter-Factory , um
JSON-Daten
in Objekte zu konvertieren. Am Ende erstellen wir eine
Instanz der API-Schnittstelle. In der onCreate-Methode
legen wir ein Layout-XML
als Inhaltsansicht fest. Lass es uns öffnen. Hier haben wir eine
Recycler-Ansicht, um Prognosedaten anzuzeigen. Dann rufen wir die Jet-Prognosemethode auf, um die Wettervorhersage zu
erhalten. Bei der Jet-Prognosemethode erstellen
wir eine Co-Routine
, um Wettervorhersagen abzurufen. Und dann schalten wir zwei Hauptdiensatcher um, um die Wettervorhersage
anzuzeigen. Bei der kurzen Prognosemethode legen
wir den
Ortsnamen als Titel fest
und prüfen dann, ob tägliche
Prognosedaten verfügbar sind. Wenn es nicht Null ist, stellen
wir den
Layoutmanager für die Recycler-Ansicht ein. Und dann stellen wir den
Prognoseadapter ein. Der Adapter empfängt
Prognosedaten und ordnet sie dem Layout zu, bei dem es die Prognose von Listenelementen handelt. Es enthält drei, es
dauert zwei Jahre, bis Datum, Temperatur
und Zustand
angezeigt werden. Im Build wurden
Gradle-Dateiabhängigkeiten für Retrofit- und Dishonor-Konverterbibliotheken hinzugefügt. Lassen Sie uns die API-Schnittstelle öffnen. Und es enthält eine Funktion die
Prognosen, Reaktionen,
Reaktionskampagnen und aktuelle
tägliche Standortinformationen
für die Prognosedaten zurückgibt Reaktionskampagnen und aktuelle . Lassen Sie uns nun diese Anwendung ausführen
und das Ergebnis sehen. Hier sehen Sie die
Anwendung, die den
Ortsnamen im
Titel und
Wettervorhersagedaten als Liste anzeigt Ortsnamen im .
9. Mit Dependency Injection: In diesem Video werden wir
Code mit Abhängigkeitsinjektion sehen . Im vorherigen Video
haben wir Code ohne
Abhängigkeitsinjektion gesehen ,
bei dem wir in der
Prognoseaktivität
eine API-Instanz erstellen . API ist also Abhängigkeit und die
Prognoseaktivität ist abhängig. Wechseln wir nun zum
Zweig DI
, der Code mit
Abhängigkeitsinjektion enthält. Um die Bibliothek von here verwenden zu können, sollte
sie dem Projekt
hinzugefügt werden. Lassen Sie mich zeigen, wie es hinzugefügt
wurde. Öffnen wir zunächst die Build-Gradle-Datei. Hier können wir sehen, dass das Plug-In für die HIV-Bibliothek hinzugefügt wurde. Öffnen wir die Build
Gradle-Datei für das App-Modul. Und das Plug-in für seine
Bibliothek wurde angewendet. Außerdem müssen wir den
Kotlin-Annotationsprozessor
hinzufügen , um die Heal-Bibliothek verwenden zu können. wurde sichergestellt, dass das Projekt Java
1.8 verwendet , da Healed dies erfordert. Dann fügen wir eine Abhängigkeit
für die Healed-Bibliothek hinzu. Und wir fügen dies hinzu, damit
Verweise Code generieren können. Der nächste Schritt besteht darin, eine
Klasse namens App zu erstellen, die die Anwendung und die
kommentierte geheilte Android-App erweitert . Diese Anmerkung weist Heel an, Code zur
Abhängigkeitsinjektion zu generieren. Öffnen Sie AndroidManifest.xml
und deklarieren die Anwendung mithilfe
des Namensattributs. Innerhalb des IP-Pakets erstellen
wir eine Modulklasse, die
mit installierten Annotationen und
Modulanmerkungen annotiert ist . In diesem Modul erstellen wir eine Funktion, die mit den
Anmerkungen „Bereitstellen
eines Patienten“ versehen ist und eine API-Instanz
bereitstellt , die
in die Prognoseaktivität eingefügt wird. Die prognostizierte Aktivität
wird mit einem
Android-Einstiegspunkt annotiert , um
Abhängigkeiten in sie einzufügen. Hier injizieren wir die
Instanz
eines Typen mit der Inject-Annotation. Wir erstellen es also nicht
innerhalb der Prognoseaktivität. Lassen Sie uns nun diesen Code ausführen
und das Ergebnis sehen. Hier sehen wir
dieselbe Anwendung, aber dieses Mal haben wir
Dependency Injection implementiert.
10. Hilt Workflow: In diesem Video werde ich
zeigen, wie Gesundheit funktioniert. Beginnen wir mit der AP-Klasse, die die Anwendung erweitert und eine geheilte
Android-App-Annotation verwendet. Die Anmerkung weist
hier an,
Abhängigkeitsinjektionscode
einschließlich der Singleton-Komponente zu generieren . Singleton-Komponente ist ein Abhängigkeitscontainer auf
Anwendungsebene
, der Abhängigkeiten injiziert. In der App Model-Klasse verwenden
wir
Modulannotationen, um ihm mitzuteilen , dass das App-Modul Abhängigkeiten
bereitstellt In der Annotation
installiert
wird verwendet, um mitzuteilen ,
zu welcher Komponente das App-Modul Abhängigkeiten
bereitstellt. In diesem Fall stellt ein Modul Abhängigkeiten für die
Singleton-Komponente bereit, sich um einen
Abhängigkeitscontainer auf Anwendungsebene handelt. Das App-Modul bietet
Abhängigkeit als API-Instanz mithilfe
von Annotationen. Bei der Prognose von Aktivitäten
wird die
Android-Einstiegsannotation verwendet, um eine
Aktivitätskomponente zu erstellen, die der
Singleton-Komponente untergeordnet ist. Das bedeutet also, dass die
Aktivitätskomponente für die Prognoseaktivität
Zugriff auf Abhängigkeiten zur
Singleton-Komponente hat . Mithilfe der Inject-Annotation können
wir eine API-Instanz injizieren. Der gesamte Workflow
sieht so aus, als ob dieses App-Modul eine API-Instanz für
die Singleton-Komponente bereitstellt. Aktivitätskomponente der
Prognoseaktivität hat Zugriff auf Abhängigkeiten zwischen
einzelnen Komponenten und fügt Abhängigkeitsinstanz der API
mithilfe der Inject-Annotation ein.
11. ViewModel: In diesem Video
werde ich zeigen, wie man Abhängigkeiten
in das Viewmodel einfügt. Lassen Sie uns zunächst Module
öffnen, Gradle-Datei
erstellen
und Abhängigkeiten
für Kotlin-Erweiterungen
für Aktivitätsartefakte hinzufügen . Innerhalb des Prognoseansichtsmodells erstellen
wir veränderliche LiveData
für die Reaktion auf die Prognose. Und wir erstellen LiveData, die anhand der prognostizierten Aktivität beobachtet
werden. Wenn das
Prognosemodell initialisiert wird. Die Prognosemethode wird jedoch aufgerufen. Die Prognosemethode erstellt eine
Coroutine, die gelöscht wird. Wenn dieses Ansichtsmodell gelöscht ist. Insights ist Coroutine Scope. Wir erhalten die Prognosedaten und
aktualisieren veränderliche LiveData. Bei der Prognoseaktivität injizieren wir das Prognoseansichtsmodell, indem wir keine
Inject-Annotation verwenden, sondern die
ViewModel-Provider-API verwenden. Andernfalls hätten wir mehrere Instanzen
von View Model. Hier stellen wir den Beobachter für
Wettervorhersagedaten ein, der bei Update die
Prognosemethode anzeigen aufruft. Lassen Sie uns nun diese Anwendung ausführen
und das Ergebnis sehen. Wie Sie sehen können, funktioniert es. Aber dieses Mal erhalten
wir ein
Daten-in-View-Modell statt Aktivität.
12. Bindungen: In diesem Video werde ich zeigen,
wie man Binds-Annotationen verwendet. Jetzt erstellen wir ein Datenrepository, das als
einzelne Datenquelle dient. Zu diesem Zweck
erstellen wir eine Schnittstelle namens Repository mit einer
Funktion, get forecast. Es ist die Suspend-Funktion, die die prognostizierte Antwort
zurückgibt. Wir erstellen eine Klasse namens
Repository Impulse, die die Implementierung
der Repository-Schnittstelle ist. Und es erhält eine API-Instanz zur Implementierung der
get-Forecast-Methode. In der App-Modulklasse erstellen
wir eine Funktion, die eine
Repository-Implementierungsinstanz bereitstellt Repository-Implementierungsinstanz , wenn das Repository angefordert wird. Nicht hier erhalten wir eine
API-Instanz und verwenden die
Repository-Implementierung. In früheren Videos haben wir die Annotation „
provides“ verwendet , um Abhängigkeiten zu
vermitteln. In diesem Video möchte
ich jedoch eine andere
Möglichkeit zeigen, um Abhängigkeit zu gewährleisten. Zu diesem Zweck erstellen wir
ein weiteres Modul, das Abhängigkeiten
für die Singleton-Komponente
bereitstellt. Und in diesem Fall verwenden
wir bindende sanitäre Einrichtungen, um für Abhängigkeit zu sorgen. Hier erstellen wir eine neue
Funktion, die eine
Repository-Implementierungsinstanz bereitstellt Repository-Implementierungsinstanz , wenn das Repository angefordert wird. Wenn wir Binden und Sanitärinstallationen verwenden, erfolgt die
Umsetzung der Funktion per Griff. Bei der Repository-Implementierung
aktivieren wir diesen Codeausschnitt um API einfügen zu
können, wenn
wir Binds Sanitation verwenden Implementierung der Funktion
erfolgt durch Health. Aus diesem Grund müssen wir die Inject-Annotation in der
Konstruktorfunktion
verwenden , um die API-Instanz zu
injizieren. In Ihrem Prognosemodell fügen wir ein Repository
statt einer API ein, es dient einer einzigen
Datenquelle. Lassen Sie uns nun diese Anwendung ausführen
und das Ergebnis sehen. Wie wir sehen können,
funktioniert es genauso. Aber dieses Mal haben wir das
Repository als einzige
Datenquelle verwendet . Außerdem nutzen wir öffentliche
Sanitärsysteme, um Abhängigkeiten zu vermeiden.
13. Singleton: In diesem Video werde ich
zeigen, wie
dieselbe Instanz bereitgestellt wird, wenn eine
Abhängigkeit angefordert wird. Das Modul stellt Abhängigkeiten
für die Singleton-Komponente bereit und erstellt jedes
Mal Instanzen , wenn eine Abhängigkeit angefordert
wird. Um dies zu überprüfen, können
wir eine
API-Instanz einfügen und uns als Zeichenfolge anmelden. Wir machen dasselbe im
Repository in der Bulk-Klasse. Lassen Sie uns nun diesen Code ausführen
und das Ergebnis sehen. Sie fühlen sich offen für Logcat, wir können sehen, dass die API-Instanzen
nicht identisch sind. Um das
Modul so zu gestalten, dass es jedes Mal
dieselbe Instanz zurückgibt jedes Mal
dieselbe Instanz können
wir die Singleton-Annotation verwenden. Diese Anmerkung weist
Healed an,
nur eine Instanz im
Singleton-Komponentenabhängigkeitscontainer zu erstellen nur eine Instanz im . Lassen Sie uns nun diesen Code ausführen
und das Ergebnis sehen. Dieses Mal können wir sehen
, dass die Instanzen dieselben sind.
14. KONTEXT: In diesem Video werde ich zeigen,
wie man Kontext einfügt. Zunächst müssen wir eine Abhängigkeit
für
den HTTP-Interceptor und den
Farbprüfer hinzufügen . Im App-Modul
erstellen wir eine Instanz des Chakra-Interzeptors, für
die Kontext erforderlich ist. Wir können den Kontext mithilfe der Annotation von
Anwendungskontexten abrufen. Dann fügen wir den Chocolate
Interceptor in die Funktion , in der wir eine Instanz
eines OK-HTTP-Clients erstellen. Dann stellen wir einen HTTP-Client eine Funktion bereit,
in der wir eine Retrofit-Instanz
erstellen. Lassen Sie uns nun diesen Code ausführen
und das Ergebnis sehen. Öffnen Sie nach dem Ausführen
die Navigationsleiste
und klicken Sie auf die Benachrichtigung, die besagt, dass die Aufzeichnung
eine GTP-Aktivität ist. Und hier sehen wir die Liste der Anfragen, die an das Backend
gesendet wurden.
15. Benannt: In diesem Video werde ich
zeigen, wie Instanzen desselben Typs
mit der Name-it-Annotation versehen werden. Öffnen Sie zunächst die von Modulen
erstellte Gradle-Datei und fügen Sie eine Abhängigkeit für den
HTTP-Logging-Interceptor hinzu. Diese Bibliothek protokolliert
HTTP-Anfragen in Logcat. Öffnen Sie dann die
Modulklasse und fügen Sie eine Funktion hinzu, die einen weiteren
Login-Interzeptor bereitstellt. Und jetzt bieten wir zwei
Instanzen der gleichen Zeit an. Abfangjäger. Wenn wir Abhängigkeit injizieren, sollte
Heel wissen, welche Instanz
wir injizieren möchten. Zu diesem Zweck wird
eine benannte Annotation verwendet. Hier legen wir die
Name-It-Annotation mit dem
Login-Interceptor-Schlüssel fest. Für den Tucker-Interceptor verwenden
wir den Namen und die Anmerkung mit dem
HTTP-Interzeptorschlüssel. Wenn wir
diese Instanzen erhalten, sollten
wir dieselbe
Annotation mit demselben Schlüssel verwenden. Und hier stellen wir auf HTTP-Interzeptoren
für den HTTP-Client ein. Lassen Sie uns nun diese Anwendung ausführen
und das Ergebnis sehen. Jetzt können wir das Protokoll für
HTTP-Anfragen in Logcat sehen.
16. Qualifier: In diesem Video werde ich
eine andere Möglichkeit zeigen, wie Sie
Instanzen desselben Typs
mithilfe benutzerdefinierter Anmerkungen bereitstellen können. In der App-Moduldatei erstellen
wir zwei benutzerdefinierte Anmerkungen
mithilfe von Qualifier-Annotationen . Mithilfe der
Retentionsannotation erstellen wir, dass diese Anmerkung
in der Binärausgabe gespeichert wird. Und wir erstellen Annotationen, HTTP-Interceptor und
Login-Interceptor. Hier stellen wir
Instanzen von Interceptor benutzerdefinierte Anmerkungen
anstelle von Namen-ID-Annotationen
verwenden. Außerdem ersetzen wir die
Name-it-Annotation durch eine
benutzerdefinierte Annotation, wenn
wir diese Instanzen erhalten. Lassen Sie uns nun diese Anwendung ausführen
und das Ergebnis sehen. Und wir können das gleiche Ergebnis sehen, das Protokoll der HTTP-Anfragen in Logcat.
17. Komponente: In diesem Video werden wir über Komponenten
sprechen. Einer der Vorteile
der Healed Library
ist, dass sie vordefinierte
Komponenten enthält. Komponenten sind Abhängigkeitscontainer, die Abhängigkeiten
injizieren. Jede Komponente ist in einer
Android-Anwendung an
einen bestimmten Lebenszyklus gebunden . Hier sehen wir die Hierarchie der Komponenten und die Hauptkomponente
ist eine Singleton-Komponente. Es ist in der
gesamten Anwendung verfügbar. Es wird erstellt, wenn
die Anwendung erstellt wird, es wird zerstört, wenn
die Anwendung zerstört wird. Gleiches gilt für andere
Komponenten, z. B. wird die
Aktivitätskomponente erstellt, wenn Aktivität erstellt
und zerstört wird. Wenn die Aktivität zerstört wird. Dies ist nützlich, wenn wir
Abhängigkeit nur für eine Aktivität benötigen , nicht für eine gesamte Anwendung. Gemäß dieser Hierarchie Abhängigkeiten der
Singleton-Komponente sind
Abhängigkeiten der
Singleton-Komponente für die
Aktivitätskomponente verfügbar, aber Abhängigkeiten der
Aktivitätskomponente sind nicht für die
Singleton-Komponente
oder andere Komponenten wie die
ViewModel-Komponente verfügbar oder andere Komponenten wie , da
es sich um eine Geschwisterkomponente handelt. Anmerkung oben: Jede
Komponente wird verwendet, um eine einzelne Instanz
der Abhängigkeit bereitzustellen, z. B. Singleton-Annotation für die
Singleton-Komponente oder Activity Sculpt-Annotation für die Aktivitätskomponente
verwendet. Lassen Sie uns ein neues
Modul erstellen, das
Abhängigkeiten für die
Aktivitätskomponente bereitstellt . Öffnen Sie zunächst die AT-Module, erstellen Gradle-Datei und fügen Sie eine
Abhängigkeit für die Picasso-Bibliothek hinzu. Es wird verwendet, um das Bild zu laden. Dann fügen
wir im Prognose-XML für Listenelemente ein neues ImageView hinzu, um
das Symbol für die Wetterbedingungen anzuzeigen. Dann erstellen wir eine neue Schnittstelle
namens Image Loader, die eine Funktion hat, um
das Bild von der URL in die Bilddaten zu laden . Danach erstellen wir eine
Implementierung des Bildladers namens
Picasso Image Loader, und sie implementiert die Funktion zum
Laden
von Bildern mithilfe der Picasso-Bibliothek. Danach erstellen wir ein neues Modell namens Aktivitätsmodul,
das Abhängigkeiten bereitstellt. Für die Aktivitätskomponente. Er hat eine Funktion und er stellt
deshalb den Bildlader zur Verfügung, wenn der Bildlader angefordert wird. Hier verwenden wir die
Activity
Sculpt-Annotation , um eine
Instanz von Image Loader zu verwenden. Bei der Prognoseaktivität injizieren
wir den Imageloader und geben ihn an
den Prognoseadapter weiter. Im Forecast-Adapter
erhalten wir diesen Bildlader und verwenden ihn, um das Bild
von der URL in ImageView zu laden. Lassen Sie uns diesen Code ausführen
und das Ergebnis sehen. Wie wir jetzt sehen können
, werden Symbole für
Wettervorhersagen und Bedingungen angezeigt.
18. Vielen Dank: Dies ist das Ende dieses
Kurses, in dem Sie lernen welche Abhängigkeit und welche
Abhängigkeitsinjektion. Sie werden lernen, wie Sie Healed
einrichten, um die
Abhängigkeitsinjektion zu implementieren , indem Sie
verschiedene Futures von Hailed verwenden. Als Bonus
möchte ich
Interviewfragen zu den Themen
Abhängigkeitsinjektion und Heilung stellen . Es ist eine PDF-Datei mit Fragen
und Antworten, die Sie im Ressourcenbereich dieses Videos herunterladen
können. Ich möchte mich bei Ihnen dafür bedanken, dass Sie
sich diesen Kurs angesehen haben. Ich hoffe es hat dir gefallen und wir sehen uns
in meinen nächsten Kursen.