Es scheint eine sehr wichtige Änderung in der Art und Weise zu geben, in der ACTION_BOOT_COMPLETED in der neuesten Android-Version gesendet wird. In JB 4.3 wurde der Boot-Complete-Broadcast parallel verarbeitet. Wo wie in KK 4.4.2 wird es seriell verarbeitet. Dies verzögert den Start von Diensten nach dem Hochfahren.
Aufgrund dieser Änderung von Google wird mein Dienststart nach dem Startvorgang verzögert. Man kann beobachten, dass das Gerät träge wird und Audio für Berührung nicht ausspielt. All dies, weil die entsprechenden Dienste zu spät beginnen.
Auch aus den Logs sehe ich, dass der erste Typ, der ACTION_BOOT_COMPLETED nach dem Aussenden erhält, nach 16-19 Sekunden empfangen wird, wo es wie bei JBP kaum 10 Millisekunden für den ersten Typ in der Empfänger-Warteschlange dauert um es zu bekommen.
Könnte jemand, der sich dieser Änderung bewusst ist, erklären, warum das gemacht wurde? Es wäre eine große Hilfe.
Vielen Dank!
Die Änderung wurde von @hackbod gemacht, vielleicht kann sie den Grund klären.
Ihre Checkin Note besagt:
Beenden Sie Problem Nr. 10779747: Kalenderspeicherabsturz beobachtet ...
... beim Einrichten eines neuen Benutzers aus den Einstellungen.
Wir können jetzt Sendungen verzögern, wenn genug Hintergrunddienste verfügbar sind gerade gestartet (immer noch 1 für schlanke Geräte, 3 für normal) Geräte).
Neues Intent-Flag hinzufügen, damit Empfänger Broadcasts nicht abbrechen können Ich benutze, um ein Problem mit der ursprünglichen BOOT_COMPLETED Broadcast nicht zu beheben PSS-Daten zur richtigen Zeit anfordern - es kann jetzt gesendet werden als eine georderte Sendung ohne die Möglichkeit für die Empfänger abzubrechen es.
Sie können versuchen, den folgenden Code zu ändern in frameworks \ base \ services \ java \ com \ android \ server \ am \ ActivityManagerService.java (Zeile 1974 herum):
%Vor%von:
%Vor%zu:
%Vor%Eine andere Lösung besteht darin, die ACTION_BOOT_COMPLETED-Absicht in finishBooting (), ActivityManagerService.java:
auf "FLAG_RECEIVER_NO_ABORT" zu setzen %Vor%Ja, ich treffe diese Frage jetzt. BOOT_COMPLETED ordered = true, viele Dienste haben eine lange Verzögerung. Wenn ich alle GMS-Apps entferne, wird es OK. Weil zu viele GMS-Apps die BOOT_COMPLETED-Übertragung registrieren.
%Vor%Es scheint ein Fehler zu sein. Da ich eine Demo-App schreibe, um BOOT_COMPLETED wie oben zu erhalten, erscheint das falsche Problem wieder.
Ich habe @ hackbods Modifikation überprüft. Ich habe keine Ahnung, außer dass ich die Reihenfolge von "wahr" auf "falsch" ändere. Warten auf @ Hackbods Antwort!
Tags und Links android performance initialization broadcastreceiver boot