Wie kann das Betriebssystem Anwendungen zum Startzeitpunkt starten?

Ich verwende Android 4.3 Jelly Bean auf einem Samsung Galaxy SIII.

Ich versuche herauszufinden, wie Anwendungen wie Skype so konfiguriert werden können, dass sie automatisch gestartet werden, sobald das System den Bootstrapping-Prozess durchlaufen hat, das Booten abgeschlossen und gestartet wurde. Ich möchte dies über eine Anwendung tun können, die möglichst kein Rooten meines Geräts erfordert. Wenn ich mir die Informationen zu Skype im standardmäßigen Anwendungsmanager ansehe, sehe ich, dass die Skype-Anwendung die Berechtigung „Beim Start ausführen“ verwendet, was bedeutet, dass es möglich sein sollte, diese App so zu konfigurieren, dass sie beim Start ausgeführt wird, aber ich konnte weder auf diesem Bildschirm noch in den Skype-Anwendungseinstellungen ein Kontrollkästchen dafür finden. Eine ähnliche Situation kann auch bei anderen Apps auftreten.

Dieser Beitrag befasst sich mit dem Verhindern des Starts von Apps und erwähnt nützliche Anwendungen von Drittanbietern wie den Autorun Manager , der anscheinend hauptsächlich damit beschäftigt ist, Anwendungen am Starten und Neustarten zu hindern, nachdem sie beendet wurden, oder zumindest entnehme ich dies der Beschreibung der App im Play Store und Autostarts , die auslösen, die verwalten, welche Apps durch Ereignisse ausgelöst werden.

Hier also meine Fragen:

  • Warum gibt es auf Android keine vorinstallierte native Startup Manager-App, um zu steuern, welche Apps standardmäßig gestartet werden sollen und welche nicht?

  • Wenn Skype die Berechtigung "Beim Start ausführen" erfordert und es im Betriebssystem oder in der App keinen Platz gibt, um eine solche App für den automatischen Start zu konfigurieren, was bewirkt diese Berechtigung dann?

Danke.

Ich finde Ihre zweite Frage interessant, da ich auch gerade getestet habe, ob Skype beim Start ausgeführt wurde (vielleicht Hintergrunddienst?), Und ich habe nichts gesehen. Ich würde sagen, "wahrscheinlich hat der Entwickler vergessen, die Berechtigungsanfrage zu entfernen", es sei denn, es funktioniert aus bestimmten Gründen auf anderen Geräten.
Ja, verstehe ich auch nicht. Nachdem mein System neu gestartet wurde, finde ich im Task-Manager: "Aktive Anwendungen: 0", "Standardeinstellungen löschen: Standardmäßig starten: YouTube [Löschen]". Wenn YouTube standardmäßig gestartet wird, wie der Task-Manager darauf hinweist, warum wird es dann nicht unter den aktiven Anwendungen des Task-Managers angezeigt? Möglicherweise muss eine App im Vordergrund ausgeführt werden, um als "aktive Anwendung" aufgeführt zu werden. Dann erscheint Skype im Anwendungsmanager nicht unter der Registerkarte AUSFÜHREN, aber wenn ich entweder unter der Registerkarte DOWNLOADS oder ALLEN Registerkarten darauf klicke, gibt es eine aktivierte Schaltfläche "Stopp erzwingen", mit der es gestoppt werden kann.
Skype kann also gestoppt werden, obwohl es nicht im Task-Manager oder unter der Registerkarte AUSFÜHREN des Anwendungs-Managers angezeigt wird. Ich verstehe nicht, was das alles bedeutet.
Ich habe gerade noch einmal nachgesehen, und es scheint, dass für alle Apps die Schaltfläche "Schließen erzwingen" aktiviert ist, auch für diejenigen, die nicht geöffnet wurden, weshalb ich auch den Grund nicht kenne.
Ich weiß es ernsthaft nicht, vielleicht bedeutet dies, dass ihre Broadcast-Empfängerkomponenten aufgerufen werden, wenn entsprechende Ereignisse gesendet werden, für deren Empfang sie eingerichtet sind. Aber das ist nur eine wilde Vermutung, die völlig falsch sein könnte. Vielleicht kann jemand diese Frage klären.
Ich denke, Ihre zweite Frage ist ein sehr Windows-ähnlicher Ansatz. Wenn Sie Apps installieren, die diese Berechtigung verwenden, können sie beispielsweise einen Broadcast empfangen und von dort aus einen Dienst einstellen. Aber die Option, beim Start zu starten oder nicht zu starten, ist sehr Windows. Normalerweise erklären Android-Apps am Anfang ihren Erlaubnisbedarf und entscheiden dann, wie sie agieren und reagieren
@Joaquin, danke für deine Antwort. Es ist sehr übersichtlich und nützlich.

Antworten (1)

Es wäre wirklich schön, einen Startup-Manager mit dem System zu haben, der den Benutzer entscheiden lässt, was gestartet werden soll und was nicht. Dem ist aber nicht so, es funktioniert etwas anders:

Apps mit der Berechtigung „Beim Start ausführen“ können einen „Zuhörer“ für die BOOT_COMPLETEDÜbertragung registrieren – die das System immer bei diesem Ereignis ausgibt. Auf diese Weise werden sie über dieses Ereignis benachrichtigt und können entscheiden, eine Aktion durchzuführen. Das könnte ein Hintergrunddienst sein, der weiterläuft – aber sie könnten auch etwas Kleines tun und sich dann wieder beenden.

IMHO Skype hat eine Option, um Sie nach dem Booten automatisch anzumelden, sodass Sie für eingehende Anrufe verfügbar sind. AFAIR ist das sogar das Standardverhalten der App. Wenn dafür kein Hintergrunddienst läuft, kann es sich dann für Cloud-Messaging registrieren – was es wiederum „aufwecken“ würde, um eingehende Anrufe zu bearbeiten. Auf diese Weise musste die App nicht dauerhaft im Hintergrund laufen. Allerdings deklariert die App auch die com.google.android.c2dm.permission.RECEIVEBerechtigung (C2DM steht für „Cloud 2 Device Messaging“, was jetzt GCM = Google Cloud Messaging ist), also könnte dies die Erklärung sein.


AKTUALISIEREN:

Andrew T. bestätigte dies in den Kommentaren:

Ich habe schließlich das Android-Manifest von Skype überprüft, indem ich seine APK-Datei ( base.apk) geöffnet habe, und tatsächlich gibt es einen com.skype.android.push.DeviceBootReceivermit Absichtsfilter android.intent.action.BOOT_COMPLETED. Ich habe jedoch nicht untersucht, was es tut. Außerdem habe ich vergessen, dass der Broadcast-Empfänger nicht unter dem laufenden Prozess aufgeführt ist, wie John erwähnt hat (ich kann bestätigen, dass dies ein Entwickler ist). Du liegst also richtig mit deiner Vermutung :)

Das habe ich auch geglaubt, bin mir aber nicht sicher, nachdem ich bestätigt habe, dass es nach dem Booten keinen Vordergrund- / Hintergrundprozess im Zusammenhang mit Skype gibt. Es ist möglich, dass sich das Startup nur für Cloud-Messaging registriert, aber meines Wissens ist es wiederum unmöglich, dass die Nachricht verarbeitet wird, wenn es keinen laufenden Prozess gibt, der dies handhabt. Ich könnte mich aber irren.
Danke @Izzy für deine Antwort. Im Anwendungsmanager kann ich sehen, dass Skype die Berechtigung „Daten aus dem Internet empfangen“ verwendet, die der C2DM-Berechtigung entspricht com.google.android.c2dm.permission.RECEIVE. Da Skype unter meiner Vermutung nicht aufgeführt RUNNINGist, dass kein Prozess oder Dienst im Hintergrund läuft, sondern die Berechtigung "Beim Start ausführen" (android.permission.RECEIVE_BOOT_COMPLETED) Skype erlaubt, einen Broadcast-Empfänger für C2DM zu registrieren, und wann Wenn die C2DM-Nachricht vom Server eintrifft, startet der Broadcast-Empfänger die Skype-Aktivität.
RUNNINGMeine Vermutung ist, dass Broadcast-Empfänger im Anwendungsmanager nicht aufgeführt sind , da diese von einem anderen Systemdienst (dessen Name mir gerade nicht einfällt) gestartet werden. Korrigieren Sie mich, wenn ich falsch liege. Danke.
@AndrewT. Da muss ich auch passen: Da ich kein Entwickler bin, habe ich keine Ahnung, wie das genau funktioniert. Aber meine Erwartungen stimmen mit dem überein, was John in seinen Kommentaren beschrieben hat: Skype wird beim Booten gestartet, registriert einen Broadcast-Empfänger und beendet sich. Immer wenn eine GCM-Nachricht eintrifft und an Skype gerichtet ist, "weckt/startet" der entsprechende Broadcast Skype erneut, um sie zu verarbeiten. Auf diese Weise ist kein "nutzloser" Prozess erforderlich, um Ressourcen zu verbrauchen. Übrigens: Die Stack Exchange App funktioniert genauso :)
Ich habe schließlich das Android-Manifest von Skype überprüft, indem ich seine APK-Datei ( base.apk) geöffnet habe, und tatsächlich gibt es einen com.skype.android.push.DeviceBootReceivermit Absichtsfilter android.intent.action.BOOT_COMPLETED. Ich habe jedoch nicht untersucht, was es tut. Außerdem habe ich vergessen, dass der Broadcast-Empfänger nicht unter dem laufenden Prozess aufgeführt ist, wie John erwähnt hat (ich kann bestätigen, dass dies ein Entwickler ist). Du liegst also richtig mit deiner Vermutung :)
Danke für deine Nachforschungen, Andrew! Ich habe dies in meine Antwort aufgenommen (natürlich mit Anerkennung), damit es nicht "hier unten verloren geht" :)