Hauptspeicher und Multitasking

  • 9 Antworten
  • Neuester Beitrag
Diskutiere Hauptspeicher und Multitasking im Android Allgemein im Bereich Betriebssysteme & Apps.
H

Hagbard235

Erfahrenes Mitglied
Mal ne Frage an die, die etwas tiefer in der Technik stecken:

Wann wird ein Programm beendet? Ich habe verstanden, das es beendet wird, sobald der Speicher von einem anderen Programm gebraucht wird. Wie stellen jetzt aber Programme wie TrackMyLife sicher, dass sie auch wirklich aktiv bleiben? Und was passiert, wenn mehrere Programme solche "Immerläufer" sind, wie Musikplayer, Navi usw. usw.
 
T

Temar

Fortgeschrittenes Mitglied
Hagbard235 schrieb:
Wann wird ein Programm beendet?
Hauptsächlich wenn der Speicher benötigt wird.

Ich habe verstanden, das es beendet wird, sobald der Speicher von einem anderen Programm gebraucht wird. Wie stellen jetzt aber Programme wie TrackMyLife sicher, dass sie auch wirklich aktiv bleiben?
Sie verwenden Services, die automatisch wieder gestartet werden können sobald wieder genug Speicher zur Verfügung steht. Darüberhinaus können sich die Services auch mit dem AlarmManager selbst wieder starten.

Und was passiert, wenn mehrere Programme solche "Immerläufer" sind, wie Musikplayer, Navi usw. usw.
Dann wird der älteste Prozess abgeschossen. Programme deren Activity gerade angezeigt wird, werden nicht abgeschossen. Es wird also nicht auf einmal dein Navi beendet, nur weil sich ein Hintergrundprozess wieder starten will.
 
H

Hagbard235

Erfahrenes Mitglied
Mmmh, aber so richtig eindeutig ist es für einen Entwickler dann nicht, oder??

Wenn ich z.B. Navi laufen habe, Musik im Hintergrund und einen Radar-Warner, wir im Zweifelsfall genau das falsche beendet, obwohl keins davon beendet werden soll.

Klar, ne Zwickmühle, denn der Speicher ist begrenzt, aber dann würde ich bei Speichermangel es gerne wissen und selber entscheiden..... aber was solls, an diesen Basics kann man ja eh nicht drehen.
 
T

Temar

Fortgeschrittenes Mitglied
Hagbard235 schrieb:
Mmmh, aber so richtig eindeutig ist es für einen Entwickler dann nicht, oder??
Nein und das ist auch gut so. Für jeden Entwickler ist natürlich das eigene Programm das wichtigste und würde es eine Möglichkeit geben dafür zu sorgen, dass das Programm nicht beendet wird, dann hättest du als User bald ständig 20 Hintergrundprozesse laufen.

Es ist schlechter Stil wenn man Programme so programmiert, dass sie ständig laufen. Das lässt sich zwar nicht immer vermeiden (Musikplayer) aber generell sollte man den AlarmManager verwenden und den Service nur dann starten lassen, wenn er auch wirklich was macht.

Wenn ich z.B. Navi laufen habe, Musik im Hintergrund und einen Radar-Warner, wir im Zweifelsfall genau das falsche beendet, obwohl keins davon beendet werden soll.
Naja, das gar keins beendet wird geht ja nicht, weil der Speicher aus. Dein Navi wird nicht beendet, weil es eine Activity auf hat - also gerade etwas auf dem Bildschirm ausgibt. Somit fällt die Entscheidung zwischen Musikplayer und Radarwarner. Je nachdem welcher von den beiden länger läuft, der wird dann beendet.

Klar, ne Zwickmühle, denn der Speicher ist begrenzt, aber dann würde ich bei Speichermangel es gerne wissen und selber entscheiden..... aber was solls, an diesen Basics kann man ja eh nicht drehen.
Doch. Das Programm, auf das du am ehesten verzichten kannst, das startest du einfach zuerst.
 
H

Hagbard235

Erfahrenes Mitglied
Das wäre im meinem Fall natürlich die Musik, denn das der Radarwarner ausgeht wäre ja gefährlicher ;-) aber wenn man zwischendurch die Musik wechselt wird wohl wahrscheinlich die Zeit für den Player zurückgesetzt. Von daher hab ich doch keine Chance. Was mich besonders stört, wenn ich zwischendurch nur kurz andere Programme öffne schliessen sich ggf. wichtige andere. Klick ich also kurz auf den Browser oder auf ein anderes Programm gehen ggf. mein Radarwarner oder Musikplayer zu und ich kann es nicht beeinflussen. Ein Taskmanager sollte eigentlich schon standard sein.
 
M

miracle2k

Ambitioniertes Mitglied
Was Temar schreibt ist prinzipiell richtig, allerdings ist es im Detail doch noch um einiges komplizierter. Insbesondere würde ich mich nicht zu sehr auf einem Timer, der zurückgesetzt wird, aufhängen. Viel zu viele andere Faktoren spielen noch eine Rolle.

Entsprechender Quellcode findet sich z.B. hier:

http://www.google.com/codesearch/p?...rnel.org/platform/frameworks/base.git&l=11228

Was mich besonders stört, wenn ich zwischendurch nur kurz andere Programme öffne schliessen sich ggf. wichtige andere. Klick ich also kurz auf den Browser oder auf ein anderes Programm gehen ggf. mein Radarwarner oder Musikplayer zu und ich kann es nicht beeinflussen.
Solange es dir nicht tatsächlich passiert halte ich es für unnötig sich darüber sorgen zu machen.

In der Praxis gibt es auch zwei verschiedene Wichtigkeitsgruppen von Services. Dein Musikplayer verwendet setForeground(), womit er, vereinfacht gesagt, genauso wichtig ist wie ein Programm das im Vordergrund läuft.

Dein Radarwarner, auf der anderen Seite, wird möglicherweise kurzzeitig beendet, aber - sofern er korrekt programmiert ist - automatisch wieder gestartet sobald genug Speicher zur Verfügung steht. Das ist hoffentlich nicht so schlimm, wenn er mal für kurze Zeit nicht läuft. Falls doch, müsste er eben auch setForeground() verwenden. Dann muss halt wieder ein anderes Programm dran glauben. Irgendwann ist halt Ende mit Speicher.

Ich verstehe auch nicht wieso du das manuell managen möchtest. Willst du wirklich alle drei Minuten gefragt werden "Welches Programm möchten sie nun beenden"?
 
H

Hagbard235

Erfahrenes Mitglied
Eher umgedreht, ICH möchte (nicht das Programm) sagen könne, welche Anwendung mir wichtig ist und das diese z.B. nicht oder möglichst spät geschlossen wird. Dann hätte ich ja auch in der Hand was ich an Speicher "verbaue" ;-)
 
JeZ

JeZ

Ambitioniertes Mitglied
Also braucht man eigentlich keinen Taskmanager um Akku zu sparen
oder Geschwindigkeit zu gewährleisten, oder sehe ich das falsch?
 
H

Hagbard235

Erfahrenes Mitglied
Nur indirekt, du kannst mit einem Taskmanager natürlich eine Anwendung, die viel Ressourcen verbraucht, dedizierter und garantierter Abschiessen, z.B. eine Anwendung die viel CPU oder WLAN oder oder oder benutzt. Wenn der Speicher dann frei ist, muss der PDA im Falle einer neuen Anwendung auch nicht erst alte beendend, sondern hat den Speicher gleich zur Hand, von daher beschleunigt ein Taskmanager schon, praxistauglich ist es aber eher weniger.
 
L

Lubomir

Experte
Problem mit sich beendende Programme weil zu wenig Speicher?

Lösung: Swap aktivieren auf ner möglichst schnellen Speicherkarte. Schon hat man die Möglichkeit deutlich mehr Programme auszuführen ohne dass diese dann gekillt werden.