Gibt es Fälle, in denen Android eine App/einen Dienst anders als aufgrund von Intents oder explizitem Benutzerstart starten würde?

Ich versuche zu verstehen, wie / warum einige der Prozesse auf meinem Telefon ausgeführt werden (DroidX, Stock 2.2 ROM).

Es ist offensichtlich, dass 2 wahrscheinliche Gründe für den Beginn eines Prozesses sind:

  • Eine direkte Aktion des Benutzers/eines anderen Programms zum Starten (z. B. Klicken auf das Symbol einer App oder ein anderer Prozess startet die .apk explizit)

  • Eine Absicht wird von der App registriert, und das mit dieser Absicht verbundene Ereignis tritt ein.

Die Frage ist, gibt es andere Gründe/Ursachen/Mechanismen, durch die ein Prozess in Android gestartet werden könnte? ( abgesehen von Absichten oder direktem Start).

PS Als plausible Theorie könnte etwas von init.rc gestartet werden (da Android auf Linux basiert), aber ich weiß nicht genug über Android-Interna, um zu beurteilen, ob es Apps über init.rc startet

Möglicherweise hilfreich: Sie können die Autostarts- App verwenden , um alle verschiedenen Systemereignisse anzuzeigen und welche Apps sich dafür registrieren.
@Matthew - Ich werde natürlich eine separate Frage zu Autostarts stellen, aber nur als Antwort auf Ihren Kommentar, listet Autostarts nicht nur alle registrierten Intent-Empfänger auf?

Antworten (1)

Ein roher nativer Prozess kann durch jeden der üblichen Unix-ähnlichen Mechanismen erstellt werden.

Eine Android-Aktivität oder ein Android-Dienst wird normalerweise von Zygote abgezweigt (als Reaktion auf eine Absicht), aber ich denke, es gibt eine obskure Möglichkeit, eine VM mit app_process von Hand zu starten.

"übliche Unix-ähnliche Mechanismen" - könnten Sie das bitte klären? Ich interessiere mich speziell dafür, was den Start des Prozesses auslösen würde (z. B. ein Crontab-Eintrag? Prozessplaner, der kürzlich tote Prozesse neu startet? usw.)
Nun, im Moment gibt es dort keinen Cron-Daemon, aber jeder könnte einen unprivilegierten mit einer gewöhnlichen App erstellen oder einen echten rooten und installieren. Dito inetd (zumindest für unprivilegierte Ports). Und ja, das Framework respawnt Dinge, von denen es nicht glaubt, dass sie hätten sterben sollen. Es gibt wirklich sehr wenig Einschränkungen bei der Prozesserstellung; Sicherheit bedeutet eher, dass es ziemlich schwierig ist, einen Prozess als eine Benutzer-ID zu starten, die mehr kann, als mit gemeinsam genutzten Ressourcen unausstehlich zu sein.
Könnten Sie bitte genauer erläutern, "das Framework lässt Dinge neu erscheinen, von denen es nicht glaubt, dass sie hätten sterben sollen"? Das klingt deutlich näher an dem, was ich als plausiblen Grund gesucht habe, warum einige Prozesse immer wieder auf meinem Telefon auftauchen.
@DVK: In einigen Fällen werden Hintergrunddienste vorzeitig beendet, da die Vordergrundanwendung mehr Speicher benötigt. Android kann den Dienst später neu starten, um den Vorgang abzuschließen.