Skip to content

Android: Falle Autostart

Android

Einer der größten Vorteile von Anrdoid gegenüber dem iphone ist die Multitaskingfähigkeit. Wie auf dem PC können mehrere Programme gleichzeitig laufen und so z.B. der Instant Messenger im Hintergrund bei Jabber oder/und ICQ online sein, der Browser eine Datei runterladen und die Musik im Hintergrund spielen während man im Vordergrund eine Kurznachricht schreibt.

Aber jedes aktive Programm belegt Ressourcen, CPU Leistung und Arbeitsspeicher sind die Kernressourcen. Android wirft bei Bedarf Programme im Hintergrund aus dem Speicher. Die Programme können dabei ihren aktuellen Zustand zwischenspeichern so dass sie genau dort weitermachen können wenn sie wieder gestartet werden. So verliert man keine entworfene Kurznachricht weil man im Vordergrund etwas Anderes, Speicherhungriges getan hat.

Damit ein Programm dann aktiv ist wenn es gebraucht wird, z.B. ein SMS Programm wenn eine Kurznachricht eingeht, können sich die Programme für bestimmte Ereignisse registrieren zu denen sie automatisch gestartet werden. So wird bei mir Handcent SMS gestartet beim Eintreffen einer Kurznachricht und wenn ich den Kameraknopf drücke.

Das ist sehr praktisch, für viele Programme auch Essenziell für die Funktion, aber der Entwickler trägt dabei auch eine nicht zu unterschätzende Verantwortung: Er muss sicherstellen, dass sich sein Programm wieder beendet wenn es nicht gebraucht wird!

Das Programm Autostarts zeigt an welches Programm wann gestartet wird. Mit root Zugriff kann man das Verhalten auch beeinflussen.
Relativ unproblematisch, weil in der Regel ordentlich programmiert, sind der Haufen Programme die “nach dem Start” automatisch aktiv werden:
Autostarts - nach dem Start
Klick für nichtgestauchte Version

Wie man sieht habe ich nur zwei Programme deaktiviert (die durchgestrichenen) weil sie auch 10 Minuten nach dem Start noch aktiv waren ohne vor dem Abschalten aktiv gewesen zu sein und von daher keinen Grund haben weiter Aktiv zu sein.
Es ist recht normal dass sich fast jedes Programm beim Start des Telefons einmal starten lässt um zu sehen ob es beim Abschalten1 bei etwas unterbrochen wurde das wieder aufgenommen werden muss.
Die Allermeisten Programme beenden sich dann auch gleich wieder. Ich prüfen das regelmässig indem ich kontrolliere welches Programm 5-10 Minuten nach dem Einschalten noch im Speicher ist. Auch wenn es nicht Aktiv ist und keine CPU Zeit verbraucht belegt es Speicher. Und ich habe keine Kontrolle darüber ob es wirklich statt einem Programm das zwar im Hintergrund ist aber ich noch nutzen will aus dem Speicher fliegt.
Wie gesagt, dieser Autostart ist normal und Problemlos. Nur 3 der 32 Programme die auf meinem Gerät automatisch beim Start gestartet werden benehmen sich daneben.

Dann gibt es die Programme, die es “zu gut” meinen: sie lassen sich starten weil sie wahrscheinlich gleich gebraucht werden.


Nachtrag: Dieser Abschnitt bzw. Beispiel ist nicht ganz korrekt, Mirko erklärt in den Kommentaren die Details
Der MortPlayer lässt sich z.B. starten wenn ein Kopfhörer eingesteckt wird. Die Idee ist gut, denn mit großer Wahrscheinlichkeit will ich wirklich Musik hören.Autostarts-Headset Allerdings lässt sich kein anderer Player den ich installiert habe bei der Gelegenheit automatisch starten und der MortPlayer stellt sich selbst ein Bein bzw. zeigt warum er es nicht tun sollte. Denn den Player gibt es in zwei Varianten: zum einen einen Verzeichnisorientierten Musikplayer, zum anderen einen Player für Hörbücher der einige darauf angepasste Optionen hat wie Lesezeichen mitten in einem Track. Das Problem: beide lassen sich automatisch starten! Ich will Musik hören und der Hörbuchplayer belegt im Hintergrund Ressourcen. Oder umgekehrt. Oder ich will gar keinen von Beiden benutzen.
Gut gedacht, schlecht gemacht. Der Start des Player dauert auch nur 2 Sekunden wenn er nicht im Speicher ist, es ist gar nicht nötig vorher in Habachtstellung zu gehen.

Und dann gibt es Programme deren Autostartregistrierung ich als Böswillig bezeichnen möchte.
Man betrachte sich folgende Liste:
Autostarts - Application installed
Warum lassen sich NewsRob (RSS-Reader), ChoiceDialer (Sprachbefehle) und TuneWiki (Musikplayer) automatisch starten wenn eine Anwendung installiert wurde? Warum lässt sich Amazons MP3-Downloads Anwendung automatisch starten wenn ich eine Anwendung aktualisiere?

Beim Systemstart klappt es schon gut, da beendet sich praktisch jedes Programm wenn es nicht zu tun hat. Der MortPlayer ist ein Beispiel wie man Ressourcen verschwendet wenn man unaufmerksam ist. Damit kann ich leben.
Aber die Programme die sich bei völlig abwegigen Gelegenheiten starten lassen sind mehr als nur ein Ärgernis. Das ist Bösartig, die Ressourcen des Telefons sind kostbar! Hätte ich keinen Rootzugriff würde ich die Programme deinstallieren, so kann ich sie an die Leine legen.

_______

1 oder Abbruch weil das Telefon heruntergefallen und der Akku aus dem Gerät geflogen ist

Trackbacks

greenrobot_de am : greenrobot_de via Twitter

Vorschau anzeigen
Android und Hintergrundprozesse: super, aber auch problematisch. Müssen Nutzer ihr Phone administrieren?? http://bit.ly/baXYr4

gphonenews am : gphonenews via Twitter

Vorschau anzeigen
Android: Falle Autostart – Der Standardleitweg: Android wirft bei Bedarf Programme im Hintergrund aus dem Speicher… http://bit.ly/cBvgIR

Der Standardleitweg am : Android: Falle Autostart

Vorschau anzeigen
Einer der größten Vorteile von Anrdoid gegenüber dem iphone ist die Multitaskingfähigkeit. Wie auf dem PC können mehrere Programme gleichzeitig laufen und so z.B. der Instant Messenger im Hintergrund bei Jabber oder/und ICQ online sein, der Browser eine

www.android-hilfe.de am : PingBack

Vorschau anzeigen

apfelnase am : apfelnase via Twitter

Vorschau anzeigen
@webharvey schau auch hier: http://rowi.standardleitweg.de/archives/1549-Android-Falle-Autostart.html

www.pocketpc.ch am : PingBack

Vorschau anzeigen

Der Standardleitweg am : Wochenendliche Android App Vorstellung Folge 69

Vorschau anzeigen
Moin Moin und Willkommen zur 69. Folge der Wochenendlichen Android App Vorstellung! Zu diesem Wochenende habe ich viel gespielt aber auch ein paar produktive Anwendungen ausprobiert:DropSpace — Verzeichnissychronisation für DropboxAutorun Manager

www.pocketpc.ch am : PingBack

Vorschau anzeigen

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Sebbi am :

Sebbi

Wow, das ist wirklich bösartig von den Programmen. Fast Windows-artig wink

Mirko am :

Mirko

So ganz stimmt das aber nicht. Die Anwendung durchsucht offensichtlich die Intents (Androids Benachrichtiungen), die die Programme im Manifest eingetragen haben. So weit nicht ganz verkehrt.

Im Fall vom Kopfhörer aber z.B. schickt Android den Intent ohnehin nur an Anwendungen, die dafür eine laufende Instanz registriert haben (registerReceiver). Beim reinen Einstecken vom Kopfhörer wird also kein Programm gestartet. Es gibt noch ein paar andere vergleichbare Ereignisse.

Leider gehören aber die Headset-Knöpfe nicht dazu. Hier wird das Programm mit der höchsten Priorität (eine Zahl, die der Entwickler sich aus den Fingern ziehen muss) gestartet, und wenn das sich nicht zuständig fühlt (Einstellung, keine laufende Wiedergabe, …) wird das mit der nächstniedrigeren Prio gestartet, usw. Wenns blöd läuft, werden da mal eben alle installierten Mediaplayer gestartet bis irgendwann Android’s Standardplayer sich zuständig fühlt. Mir wäre da eine andere Lösung auch lieber, aber wenn man die Headset-Buttons unterstützen will, bleibt einem keine Wahl…

Allerdings sollte man auch erwähnen, dass hier nicht gleich wie bei Windows üblich das gesamte Programm gestartet wird. Diese Ereignisse starten erstmal nur einen sogenannten “Broadcast Receiver”, der üblicherweise weder viel Speicher braucht noch viel Arbeit verrichtet. Erst wenn der z.B. ein Fenster öffnet oder einen Dienst startet wird richtig Speicher und CPU verbraten.

rowi am :

rowi

Ah, Danke für die Erklärung!

Ich habe es mit dem OS Monitor ausprobiert und der MortPlayer wird tatsächlich nicht gestartet wenn ich das Headset einstecke.
Allerdings werden beide MortPlayer zusammen mit dem Android Audioplayer (‘Musik’) gestartet wenn ich das Headset wieder ausstecke?
Wie passt das denn in das Schema?

Mirko am :

Mirko

Fürs Ausstecken gibt’s noch eine weitere Benachrichtigung (android.media.AUDIO_BECOMING_NOISY), die zuverlässiger (v.a. bei A2DP-Headsets) und v.a. schneller gesendet wird. Scheinbar wird die dann auch an nicht laufende Programme geschickt. Auch sehr sinnvoll von Android, als ob die dann irgendwelchen Krach stoppen könnten… Naja, manchmal hat halt auch das im Großen und Ganzen ziemlich durchdachte System seine Lücken…

Apropos Lücken – theoretisch kann man in den “Broadcast Receivern” abfragen, ob der Dienst läuft. Blöderweise ist die Funktion dafür (peekService) selbst in 2.0.1 noch derart buggy (liefert meist nichts zurück, selbst wenn der Dienst läuft), dass man sie nicht nutzen kann…

Michael am :

Michael

AFAIK ist das so nicht ganz korrekt. Android schickt auch die ACTION_HEADSET_PLUG action an alle Receiver, einschließlich solchen die sich statisch registrieren. Ich habe das auch gerade ausprobiert auf einem Milestone, und beim Ein-/Ausstecken des Headsets wird der Mortplayer bei mir tatsächlich gestartet (vorausgesetzt das Event wurde nicht schon vorher deaktiviert, natürlich).

Allerdings sollten Anwendungen natürlich, sofern das reicht, registerReceiver() verwenden um nur dann benachrichtigt zu werden wenn sie sowieso schon laufen.

Ansonsten ist es vielleicht nicht ganz fair den Entwicklern Böswilligkeit zu unterstellen; in der Regel ist es eher gut gemeint; Newsrob z.B., so vermute ich jedenfalls, verwendet das Event um zu sehen ob das Unlock-Package für die Pro-Version installiert wurde. Die Alternative wäre das bei jedem Start zu machen (mgl. langsam), oder vom Nutzer zu verlangen dass er manuell eine Funktion aufruft.

Kommentar schreiben

Textile-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Twitter, Identica, Pavatar, Gravatar, Wavatars, Monster ID Autoren-Bilder werden unterstützt.
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Formular-Optionen