Android Warum kann man App's nicht beenden?

  • Themenstarter Themenstarter P aus S
  • Beginndatum Beginndatum
P

P aus S

Gast
Hi,
also zunächst: Ich hab erst seit ein Paar tagen ein Android Gerät und deshalb nicht viel Plan vom OS.

Das erste was ich bemerkt habe ist, dass ich irgendwie die Apps nicht richtig schließen kann...
Mit TouchWiz kann ich zwar so oft "Züruck" drücken bis die App beendet wird, aber keine App hat eine "echte" beenden Funktion.
Mit dem LauncherPro geht das aber gar nicht, d.h. die zurück Taste macht gar nix und ich kann daher die App nur per Task-Manager abschießen oder per Home Button "minimieren".

Warum ist das so bei Android? Laut anderen Foren gibt es in der API auch keine richtige beenden Funktion bzw. hieß es laut google immer "So funktioniert Android nicht" und deshalb gibts keine beenden Funktion.

Ich bin nun kurz davor eine App zum abschießen der Apps (z.B. nach 3. Sek langem halten der Zurück-Taste) zu Programmieren, jedoch denke ich mir, dass sich google was dabei gedacht hat...nur was?

Gruß
 
Performance ist das Ziel.

Die App wird im Hintergrund gelassen um nicht den ganzen Prozess hochziehen zu müssen wenn sich der Benutzer dazu entscheidet doch wieder in die App reinzuschauen. So kann schnell der Context gewechselt werden.

Das ist natürlich für einen Android-Anfänger - vor allem als SW-Entwickler mit Kontrollzwang - ein grausiger Moment zu bemerken, dass die Apps nicht manuell abgeschossen werden können aber so ist es halt. Das Betriebssystem beendet die App von alleine wenn sie zum Schluss kommt der Benutzer braucht sie nicht mehr. Das Prinzip ähnelt einem GC.

Aber es gibt sogar Advokaten dieses neuen Applikationsparadigma die das auch für Desktop-Systeme fordern. Die Debatten drehen sich darum, dass dir als Anwender ja egal ist wie die Ressourcen verwaltet werden hauptsache es funktioniert alles wie es soll.
 
Hey P,

muss dir leider zustmmen, soweit ich weiss gibt es wirklich keine Methoden zum Beenden der Anwendung. Lediglich mit so einer destroy() Methode kann man die Anwendung bzw. den Prozess killen. Ich denke ein Grund koennte sein wieso die Apps nicht beendet werden koennen, weil sie bei dem ersten Starten meistens eine laengere Zeit zum Laden brauchen. Denn soweit ich weiss wird bei jedem neuen Start die Anwendung komplett neu auf Android installiert.

gruss
 
Denn soweit ich weiss wird bei jedem neuen Start die Anwendung komplett neu auf Android installiert
Wo hast du denn das her? Wenn du im Eclipse auf Run klickst wird die Anwendung neu installiert aber nicht wenn du eine installierte ungestartete App anstarten möchtest.
 
Zuletzt bearbeitet:
Das ist natürlich für einen Android-Anfänger - vor allem als SW-Entwickler mit Kontrollzwang - ein grausiger Moment zu bemerken, dass die Apps nicht manuell abgeschossen werden können aber so ist es halt.
Ja da hast du recht, ich hab da wirklich den Kontrollzwang^^

Es besteht ja die möglichkeit die App's durch den Homebutton zu minimieren...warum mir da nicht erlaubt wird das Programm zu schließen, verstehe ich einfach nicht.
Es ist zwar verständlich, dass es performanter ist die App im Hintergrund zu behalten, aber letztendlich will der User ja bewusst die App schließen.


Hab noch zwei Wochen lang Prüfungszeit, danach werde ich mal so eine App schreiben, die die Programme schließt bzw. killt (Ja, abschießen ist nicht schön, aber andere Möglichkeiten lässt ja google nicht übrig). Dabei meine ich nicht das nachträglich hinzugefügte "beenden-Kreuzchen" wie man es im App-Store findet, sondern etwas stylischer mit 2-3 sek. Back-Button.

[Wobei ich mich grad frage, wie das OS die App beim "Ram-Putzen" beendet. Evtl. gibts ja doch noch einen schöneren Weg als den Prozess abzuschießen.]



Gruß und Danke für die Antworten 🙂
 
[Wobei ich mich grad frage, wie das OS die App beim "Ram-Putzen" beendet. Evtl. gibts ja doch noch einen schöneren Weg als den Prozess abzuschießen.
Du hast es selber schon gesagt: Das OS beendet die App, nicht die App sich selber.

Würde dir empfehlen dich an das neue Paradigma zu gewöhnen anstatt PseudoLösungen zu basteln, genauso schlecht würde es in Java funktionieren selber Objekte freizugeben weil man meint der GC kann das nicht wirklich gut und man von einem "nicht GC" Background kommt (wie zB. C/C++).
 
Für mich war das am Anfang auch ungewöhnlich. Hatte auch die ersten Wochen einen Taskkiller drauf und alles abgeschossen was mir in die Quere kam. Letztendlich habe ich dadurch aber mehr Fehler verursacht als dass es irgendetwas geholfen hätte. Es gibt bspw. Hintergrundprozesse die sich selbstständig nach einer gewissen Zeit neustarten, wenn sie abgeschossen wurden. Das kann dann ziemlich viel durcheinander bringen.

Fakt ist: Es gibt bei Android überhaupt keinen Grund eine App zu beenden. Die Apps werden über den Home- oder Zurück-Button in eine Art Tiefschlaf versetzt. Jede halbwegs anständig programmierte App gibt dann alle benötigten Ressourcen wieder frei. Die App läuft also nicht im Hintergrund weiter, sondern schläft einfach nur. Braucht keine CPU, frisst also auch keinen Akku (es sei denn die App definiert bewusst Hintergrundprozesse), sondern liegt einfach nur rum. Das einzige was die App im Tiefschlaf verbraucht ist RAM, da sie ja noch im Speicher gehalten werden muss. Sobald Android jedoch feststellt, dass nicht mehr genügend RAM vorhanden ist, werden schlafende Apps automatisch beendet. Du hast also keine Komforteinschränkungen - im Gegenteil, die Apps sind schneller wieder da, du kannst schnell zwischen Apps wechseln und du kannst sofort da wieder weitermachen, wo du zuvor aufgehört hast.

Der einzige Grund, warum ich noch einen Taskkiller (OSMonitor, viel mehr als nur ein Taskkiller) auf meinem Androiden habe is der, falls eine App wirklich abstürzen sollte und nicht mehr funktionsfähig ist. DANN und nur dann macht es Sinn eine App zu beenden.

Ich weiß, es ist schwer sich daran zu gewöhnen. Aber man gewöhnt sich dran 😉 .
 
Schau dir mal den Android App Lifecycle. Und gewöhn dich daran. Es gibt keinen Grund eine App gewollt zu beenden. Gibt zwar eh schon in den Entwickleroptionen, die Funktion die du bewerkstelligen willst, aber die haben sich bei diesen Design schon was gedacht.
 
Es ist zwar verständlich, dass es performanter ist die App im Hintergrund zu behalten, aber letztendlich will der User ja bewusst die App schließen.
Da muss ich widersprechen. Dem Benutzer ist es vollkommen egal ob der Prozess noch läuft oder nicht. Dem Benutzer ist auch der RAM egal. Der Benutzer braucht die App nicht also "legt er sie weg". Später braucht er sie vielleicht wieder und schaut sie wieder an. Vom Beenden der App ist hier nirgends die Rede. Wenn ich den Schlüssel beim Auto abziehe, stecke ich den Radio ja auch nicht händisch ab.

Vergiss nicht: Mobile Applikationen haben einen komplett anderen Kontext als Desktop-Anwendungen. Man muss umdenken wenn man beginnt für Smart-Phones zu entwickeln. (IMHO ein Grund warum sich Windows Mobile nie durchgesetzt hat trotz enormen Funktionsumfang.)

Wobei ich mich grad frage, wie das OS die App beim "Ram-Putzen" beendet. Evtl. gibts ja doch noch einen schöneren Weg als den Prozess abzuschießen.
Du solltest dir - sofern du deine Ressourcen ordentlich öffnest u. schließt - überhaupt keine Gedanken darüber macht wann deine App in welches Stadium des Activity Lifecycles übergeht. Da du obiges geäußert hast, ist wohl klar, dass dir noch ein bisschen Basiswissen fehlt. Lies dich mal ein.

Dem Betriebssystem gegen die vorgeschriebene Architektur etwas aufzwingen zu wollen ist nicht nur für den Zustand des Systems u. die Performance gefährlich sondern auch in jeder Hinsicht kontraproduktiv.
 
Vergiss nicht: Mobile Applikationen haben einen komplett anderen Kontext als Desktop-Anwendungen. Man muss umdenken wenn man beginnt für Smart-Phones zu entwickeln. (IMHO ein Grund warum sich Windows Mobile nie durchgesetzt hat trotz enormen Funktionsumfang.)
Witzigerweise verhalten sich Windows Phone 7 und iOS in diesem Punkt genauso, da wird nix wirklich "geschlossen", scheint normal bei mobilen Apps zu sein, unabhängig vom OS.
 
Wenn ich den Schlüssel beim Auto abziehe, stecke ich den Radio ja auch nicht händisch ab.
Ich würde sagen der Gedanke dreht sich eher darum, dass wenn ich das Auto abschließe, ich auch erwarte dass das Auto abgeschlossen ist und nicht für einen möglichen späteren Einsatz offen bleibt.
Da du obiges geäußert hast, ist wohl klar, dass dir noch ein bisschen Basiswissen fehlt. Lies dich mal ein.
Ja, habe ich auch geschrieben, dass ich erst seit ein paar Tagen ein Android-Gerät habe. Ich war vorher mit Symbian unterwegs...

Der Sinn des ganzen erschließt sich mir immer noch nicht richtig. Jedoch akzeptiere ich das schon, wenn es so "vorgesehen" ist. Habe aktuell sowieso keine Zeit zum entwickeln...mal sehen ob ich mich in zwei Wochen an die Android-Geschichte gewöhnt habe.


btw. Der JavaGC Vergleich ist zwar teilweise einleuchtend, jedoch hinkt er auch ein wenig. In Java allokiert die VM den Speicher, daher sollte die VM ihn wieder freigeben. In C/C++ allokiere ich selbst, also habe ich mich auch selbst um das Freigeben zu kümmern.
Genau dieses Verhalten bin ich im Allgemeinen gewohnt: Ich starte eine Anwendung, ich schließe die Anwendung. Das OS startet ein Prozess, das OS beendet den Prozess.

Aber ich werde mal probieren das ganze so zu verwenden, wie es vorgesehen ist. Mal schauen wie ich in zwei Wochen darüber denke...

Gruß
 
btw. Der JavaGC Vergleich ist zwar teilweise einleuchtend, jedoch hinkt er auch ein wenig. In Java allokiert die VM den Speicher, daher sollte die VM ihn wieder freigeben. In C/C++ allokiere ich selbst, also habe ich mich auch selbst um das Freigeben zu kümmern.
Genau dieses Verhalten bin ich im Allgemeinen gewohnt: Ich starte eine Anwendung, ich schließe die Anwendung. Das OS startet ein Prozess, das OS beendet den Prozess.
Nun ja, die Java Anwendung allokiert ja Speicher von der VM für Objekte, muss ihn aber nicht mehr explizit zurückgeben. Die VM gibt übrigens den Speicher erst nach beenden der gesamten VM wieder an das OS zurück.

Wie gesagt, andere Mobile OS (iOS, Windows Phone 7) verhalten sich genauso wie Android, scheint etwas dranzusein 😉

Denke dass es sich dabei hauptsächlich um alte Gewohnheitenhandelt die abgelegt/überdacht werden sollten, ist ja oft der Fall, zB. wenn man testgetrieben entwickelt, da heisst es am Anfang von neulingen auch nur "geht nicht", "unlogisch" und "früher hat man das nie so gemacht".

Denke dass du mit deinem Samsung Androiden (touchwiz gibt es nur bei Samsung) trotzdem sehr glücklich sein wirst 🙂
 
Zum Einlesen: Das ist nicht bös gemeint aber es hilft ungemein die Philosophie hinter dem OS zu verstehen.
Ich hab da genauso gekämpft wie du. Vor allem dieses Gängeln von Seitens der Architektur ist seltsam wenn man im Hinterkopf hat, dass das ein Linux ist. Apropos Philosophie, das bringt mich auch gleich zum nächsten Punkt:

Ich starte eine Anwendung, ich schließe die Anwendung.

Allerdings startest du die Anwendung nicht auf Android. Du sagst nur was du vorhast bzw. was deine Absicht (Intent) ist. Beim Programmieren nennt man das auch "tell, don't ask"
 
Zuletzt bearbeitet:
Hallo,

also ich finde es total falsch, wenn man die Apps nicht manuell beenden kann.
Das hat ja nicht nur was mit Ressourcenverwaltung zu tun.
Wenn ich 3 Stunden mit dem Android System arbeite und in der Zeit 40 Apps gestartet habe,
dann stehen die alle noch in der Taskliste.

Da bin ich ja schon allein gehandicapt durch die Suche der einen App, die mich noch interessiert.
Ebenso habe ich da noch Apps drin, die ich vielleicht versehentlich gestartet habe, gar nicht starten
wollte etc.

Wenn das ganze nur im Hintergrund so gehandelt wird ist es ja evtl. noch ok, aber nicht wenn es dabei
eine Schnittstelle zum Anwender gibt.

Das Betriebssystem kann ja im Prinzip alles so verwalten wie bislang, nur sollte es dem Anwender
ebenfalls die Möglichkeit einräumen so eine Entscheidung zu treffen.
Ich denke auch, das das Verhalten nicht sehr benutzerfreundlich ist und somit nicht gerade eine gute Werbung...

(P.S. diese Taskkiller haben bei mir auch nicht richtig funktioniert, momentan ist daher mein Aufräumer
der Neustart)

Gruß
Knorrfaust
 
Das Betriebssystem kann ja im Prinzip alles so verwalten wie bislang, nur sollte es dem Anwender
ebenfalls die Möglichkeit einräumen so eine Entscheidung zu treffen.
Die gibt es auch. Wenn man mit der unsichtbaren App wirklich nicht leben kann, kann man über Anwendungen => die böse Anwendung => stoppen die Anwendung abschießen. Braucht man nur nicht.

Da bin ich ja schon allein gehandicapt durch die Suche der einen App, die mich noch interessiert.
Ich hab schon ein paar Usability-Tests durchgeführt und auch Beobachtungen gemacht wie Leute ihr Smartphone verwenden. Wenn du tatsächlich 40 Apps verwendest fällst du aus der Norm und dann ist's vermutlich wirklich so, dass das Konzept für dich nicht passt. (Wenn du 40 Apps verwendest laufen ja sowieso nie mehr als 10 auf einmal. Die anderen werden geschlossen um den Speicher zu sparen. Das System merkt sich nur die Anwendungen damit du sie schneller wieder starten kannst ala "verdammt vor 10 minuten hatte ich das offen, jetzt brauche ich es und muss mich durch 1000 Apps durcharbeiten.)
Dann kann ich dir nur empfehlen dich nach App-Startern umzusehen die dir den Umgang erleichtern.

Ich denke auch, das das Verhalten nicht sehr benutzerfreundlich ist und somit nicht gerade eine gute Werbung...
Das ist doch vollkommener Unsinn. Nur weil es dir nicht gefällt ist es nicht benutzerfreundlich? Du hast das Gefühl, dass du deine Apps beenden musst - ja dann tu es. Die meisten Menschen kommen auch ganz gut ohne aus. Der Punkt ist - wie oben schon beschrieben - die Arbeit aufzuräumen erledigt das System.
Außerdem wem soll das abschrecken? Apple-Kunden? Der iOS-App-Lifecycle ist deutlicher konfuser aber das System ist trotzdem ähnlich. Beim WP Phone weiß ich nicht wie's läuft, da könnt's schon sein. Aber im Thread wurde schon darauf hingewiesen dass es dort auch so ist.

Es ist nicht so wie mit der Taskleiste, dass alle Apps offen bleiben und du dich durch alle durcharbeiten musst.
 

Zurück
Oben