https://developer.android.com/about/versions/oreo/background?hl=ja
[Shakyo]: Für mich
Um ein unerwartetes Herunterfahren der App aufgrund von Systemlast usw. zu vermeiden, wird der Ausführungsvorgang der App eingeschränkt, wenn die App nicht direkt betrieben wird. Es gibt zwei Möglichkeiten, dies zu begrenzen.
Für Android 7.0 (API 24) oder höher gelten Einschränkungen, und für Android 8.0 (API 26) werden die Einschränkungen verschärft.
Mit wenigen Ausnahmen
--Apps können keine Manifeste verwenden, um implizite Broadcasts zu registrieren.
Hinweis: Standardmäßig gelten diese Einschränkungen nur für Apps, die auf Android 8.0 (API 26) oder höher abzielen. Benutzer können jedoch die meisten dieser Einschränkungen für ihre Apps auf dem Einstellungsbildschirm aktivieren, selbst wenn die App auf weniger als API 26 abzielt. (Durch das Einschränken wird die Qualität der Benutzererfahrung sichergestellt.) |
In vielen Fällen kann die App die Einschränkung mit JobScheduler </ font> umgehen.
Mit JobScheduler </ font> können Sie Maßnahmen ergreifen, wenn die App inaktiv ist. Sie können die Aktion jedoch auch so planen, dass sie die Benutzererfahrung nicht beeinträchtigt.
Android 8.0 fügt JobScheduler </ font> einige Verbesserungen hinzu, die es einfach machen, Dienste und Rundfunkempfänger durch geplante Jobs zu ersetzen. Weitere Informationen finden Sie unter JobScheduler-Verbesserungen.
JobScheduler: </ strong>
Ein Zeitplandienst, der Aufgaben verwaltet, damit verschiedene Prozesse effizient ausgeführt werden können. </ font>
In jedem anderen Zustand wird die App als Hintergrundverarbeitung betrachtet.
Note: Die oben genannten Regeln gelten nicht für gebundene Dienste. Wenn Ihre App einen gebundenen Dienst definiert, können Sie eine andere Komponente an diesen Dienst binden, unabhängig davon, ob Ihre App im Vordergrund steht oder nicht. |
Sie können Vordergrund- und Hintergrunddienste generieren und ausführen, während Ihre App im Vordergrund ausgeführt wird. Wenn die App in den Hintergrund tritt, kann es sich leisten, Dienste nur wenige Minuten lang zu generieren und auszuführen. Danach stellt das System fest, dass die App inaktiv ist und Service.stopSelf. Beenden Sie den Hintergrunddienst der App, z. B. bei Verwendung der Methode () </ font>.
Die Bedingung für die Whitelist der App ist, dass der Benutzer die folgende sichtbare Verarbeitung ausführt.
Unter bestimmten Bedingungen werden Hintergrund-Apps auf einer temporären Whitelist abgelegt, können Dienste für einige Minuten kostenlos starten und ausgeführt werden.
Beim Umgang mit Hintergrunddiensten in IntentService
Note: Da IntentService strong> ein Dienst ist, unterliegt er neuen Einschränkungen für Hintergrunddienste. Daher funktionieren Apps, die von IntentService abhängen, unter Android 8.0 oder höher nicht ordnungsgemäß. Aus diesem Grund führt die Android Support Library 26.0.0 eine neue JobIntentService-Klasse ein. Diese Klasse bietet die gleiche Funktionalität wie IntentService strong>, verwendet jedoch Jobs strong> anstelle von Services strong>, wenn sie unter Android 8.0 und höher ausgeführt wird. |
JobScheduler In vielen Fällen ersetzen Apps Hintergrunddienste durch JobScheduler </ font> -Jobs (z. B. bei der Migration auf Android 8.0: API 26 oder höher). Geplante Jobs werden regelmäßig gestartet, der Server abgefragt und beendet.
In Android 8.0 und früheren Versionen können Sie einen Hintergrunddienst erstellen, indem Sie einen Hintergrunddienst erstellen und diesen Dienst dann in den Vordergrund stellen.
Ab Android 8.0 können Hintergrund-Apps keine Hintergrunddienste mehr erstellen. Stattdessen wurde eine startForegroundService () </ font> -Methode eingeführt, mit der ein neuer Dienst im Vordergrund gestartet wird.
Nach dem Ausführen von startForegroundService () </ font> wird startForeground () </ font> </ strong> innerhalb von
Erfahren Sie, wie Sie Hintergrundbeschränkungen für weniger als API 26 anwenden. Durch das Festlegen von Hintergrundbeschränkungen bleibt die Qualität der Benutzererfahrung erhalten.
Selbst wenn die API kleiner als 26 ist, können Sie Einschränkungen für die App auf dem Bildschirm ** [Einstellungen] ** aktivieren. Neu Möglicherweise müssen Sie Ihre App aktualisieren, um die Einschränkungen zu erfüllen.
Wenn eine App inaktiv ist und auf die Verarbeitung von Hintergrunddiensten angewiesen ist, müssen diese Dienste ersetzt werden.
**
--Wenn sich die App im Hintergrund befindet und Sie einen Vordergrunddienst erstellen möchten
startForegroundService </ font> -Methode, startService () </ font> Verwenden Sie statt, um Vordergrunddienste zu generieren
Der dem Benutzer angezeigte Dienst sollte ein Vordergrunddienst sein.
Verwenden Sie die Methode startForegroundService </ font> anstelle von startService () </ font>. Verwenden Sie diese Option, um einen Vordergrunddienst zu generieren
Doppelte Dienstfunktionalität mit geplanten Jobs
Verwenden Sie geplante Jobs im Allgemeinen als Alternative zu Diensten, die nicht in einer vom Benutzer erkennbaren Situation ausgeführt werden.
</ font> Verwenden Sie FCM, um Apps selektiv zu starten, wenn Netzwerkereignisse auftreten, ohne im Hintergrund abzufragen.
Polling: Fragen Sie in regelmäßigen Abständen andere Systeme ab </ font>
--Halten Sie den Hintergrundbetrieb, bis die App natürlich im Vordergrund steht
Überprüfen Sie den im Manifest der App definierten Rundfunkempfänger. Wenn das Manifest einen Empfänger für implizite Sendungen deklariert, müssen Sie ihn ersetzen. Mögliche Lösungen sind:
**
Anstatt den Empfänger im Manifest zu deklarieren, rufen Sie Context.registerReceiver () </ font> auf, um den Empfänger zur Laufzeit zu erstellen
Verwenden Sie einen geplanten Job, um die impliziten Broadcast-Triggerbedingungen anzuzeigen