In meiner Android-App habe ich mehrere Intent-Dienste, die nacheinander ausgeführt werden, und der allererste Intent-Dienst wird durch einen Broadcast ausgelöst. Ich bin gestoßen Arbeitsmanager vor ein paar Tagen und mochte die Einfachheit der Klassen Worker und WorkManager sehr. Was sind die Vor- und Nachteile von Work Manager gegenüber regulären Absichtsdiensten? Sollte ich jetzt zum Work Manager wechseln, wenn ich bedenke, dass ich in Zukunft möglicherweise mehr Intent-Services schreiben muss? Welche Option würde mir auch helfen, den Code einfach zu testen?
Android Work Manager vs. Dienste?
Entehrt
WorkManager verfügt über folgende Funktionen:
- Bietet Aufgaben, die den Prozesstod überleben können
- Es kann die App und den App-Prozess aufwecken, um die Arbeit zu erledigen, wodurch garantiert wird, dass die Arbeiten ausgeführt werden.
- Ermöglicht die Beobachtung des Arbeitsstatus und die Möglichkeit, komplexe Arbeitsketten zu erstellen
- Ermöglicht die Arbeitsverkettung, die es ermöglicht, einen großen Teil der Arbeit in kleine Arbeiten zu unterteilen und sie basierend auf verschiedenen Einschränkungen auszuführen
- Verwaltet elegant den Doze-Modus oder andere vom Betriebssystem auferlegte Einschränkungen.
Im Folgenden sind die Fälle aufgeführt, in denen dies hilfreich wäre:
- Ausführen lang andauernder Hintergrundaufgaben wie dem Hochladen von Medien
- Analysieren und Speichern von Daten in der Datenbank.
- Kritische Aufgaben, die den Prozesstod überleben müssen
Sollte ich jetzt zum Work Manager wechseln, wenn ich bedenke, dass ich in Zukunft möglicherweise mehr Intent-Services schreiben muss?
In den meisten Fällen sollte es ein Ersatz für IntentService sein, aber Sie müssen sorgfältig überlegen, bevor Sie es verwenden. Es könnte sein, dass IntentService von Anfang an nicht die beste Wahl war.
WorkManager ist keine Antwort auf alle Hintergrundaufgaben. ZB Sie sollten es nicht für die Verarbeitung von Zahlungen verwenden, da es den Prozesstod nicht überleben muss und diese Aufgaben sofort ausgeführt werden müssen. Erwägen Sie die Verwendung des Vordergrunddienstes. Es ist auch keine gute Idee, sie zum Analysieren von Daten und Inhalten der Ansicht zu verwenden.
Sie müssen wirklich abwägen, ob Sie Funktionen davon benötigen, bevor Sie es verwenden. Da Google die Art und Weise, wie wir codieren, fast überarbeitet, wäre WorkManager eine Lösung für unsere Probleme mit der Hintergrundverarbeitung. Sicherlich wäre dies die wichtigste Option, da sie die Handhabung mehrerer vom Betriebssystem auferlegter Einschränkungen abstrahiert. Sie sollten es für zukünftige Implementierungen verwenden.
Welche Option würde mir auch helfen, den Code einfach zu testen?
Google hat auch eine Testbibliothek bereitgestellt, die den Test von WorkManager erleichtert. Es befindet sich noch in der Entwicklung, sollte aber vor seiner Veröffentlichung leistungsfähiger werden.
-
Hallo, da die Methode doWork() sync ist, gibt es eine Möglichkeit, mit RxJava asynchron zu arbeiten oder nicht?
– Mehdi Jahed Manesh
22. Mai 2018 um 7:12 Uhr
-
@MehdiJahedManesh
doWork()
wird im Hintergrundthread ausgeführt.– Sagar
22. Mai 2018 um 12:09 Uhr
-
@NicolasJafelle Ja. Sie können PeriodicWorkRequest verwenden. Die Aufgabe wird garantiert ausgeführt, auch wenn Ihre App zwangsweise beendet oder das Gerät neu gestartet wird
– Sagar
7. Juni 2018 um 23:28 Uhr
-
Gibt es einen Grund, noch zu verwenden
IntentService
heutzutage?– IgorGanapolsky
18. Februar 2020 um 18:11 Uhr
-
Was ist mit kritischen Uploads, die etwa alle 5 Minuten ausgeführt werden sollen? Denn manchmal werden Worker pausiert, wenn der Nutzer die App sehr lange nicht öffnet. Ist es in einem solchen Fall ratsam, Dienstleistungen oder Arbeitskräfte zu haben?
– Anirudh Ganesh
13. November 2020 um 18:59 Uhr
Benötigen Sie diese API, um Benachrichtigungen anzuzeigen?
– IgorGanapolsky
18. Februar 2020 um 18:12 Uhr