Dies wird irgendwann zu Ihrer Frage führen, aber ich möchte zunächst eine Reihe von Fragen ansprechen, die Sie in Ihren verschiedenen Kommentaren zu den verschiedenen Antworten ansprechen, die zum Zeitpunkt dieses Schreibens bereits gegeben wurden. Ich habe nicht die Absicht, Ihre Meinung zu ändern - vielmehr sind diese für andere da, die diesen Beitrag in Zukunft lesen möchten.
Der Punkt ist, dass ich nicht zulassen kann, dass Android bestimmt, wann meine App beendet wird. das muss die Wahl des Benutzers sein.
Millionen von Menschen sind vollkommen zufrieden mit dem Modell, bei dem die Umgebung die Anwendung nach Bedarf schließt. Diese Benutzer denken einfach nicht daran, die Android-App zu "beenden", genauso wenig wie daran, eine Webseite zu "beenden" oder einen Thermostat zu "beenden".
iPhone-Benutzer sind ähnlich, da das Drücken der iPhone-Taste nicht unbedingt das Gefühl hat, dass die App beendet wurde, da viele iPhone-Apps dort weitermachen, wo der Benutzer aufgehört hat, selbst wenn die App wirklich heruntergefahren wurde (nur seit dem iPhone) erlaubt derzeit jeweils eine Drittanbieter-App).
Wie oben erwähnt, ist in meiner App eine Menge los (Daten werden auf das Gerät übertragen, Listen mit Aufgaben, die immer vorhanden sein sollten usw.).
Ich weiß nicht, was "Listen mit Aufgaben, die immer vorhanden sein sollten" bedeutet, aber die "Daten, die auf das Gerät übertragen werden" sind eine angenehme Fiktion und sollten auf keinen Fall von einer Aktivität ausgeführt werden. Verwenden Sie eine geplante Aufgabe (via AlarmManager
), um Ihre Daten für maximale Zuverlässigkeit zu aktualisieren.
Unsere Benutzer melden sich an und können dies nicht jedes Mal tun, wenn sie einen Anruf erhalten und Android beschließt, die App zu beenden.
Es gibt viele iPhone- und Android-Anwendungen, die sich damit befassen. In der Regel liegt dies daran, dass die Anmeldeinformationen beibehalten werden, anstatt die Benutzer zu zwingen, sich jedes Mal manuell anzumelden.
Beispielsweise möchten wir Aktualisierungen beim Beenden der Anwendung überprüfen
Das ist ein Fehler auf jedem Betriebssystem. Nach allem, was Sie wissen, wird Ihre Anwendung "beendet", weil das Betriebssystem heruntergefahren wird und Ihr Aktualisierungsprozess dann während des Streams fehlschlägt. Im Allgemeinen ist das keine gute Sache. Überprüfen Sie entweder die Aktualisierungen beim Start oder die Aktualisierungen vollständig asynchron (z. B. über eine geplante Aufgabe), niemals beim Beenden.
Einige Kommentare deuten darauf hin, dass das Drücken der Zurück-Taste die App überhaupt nicht beendet (siehe Link in meiner Frage oben).
Durch Drücken der BACK-Taste wird die App nicht "beendet". Damit ist die Aktivität beendet, die auf dem Bildschirm angezeigt wurde, als der Benutzer die Taste ZURÜCK drückte.
Es sollte nur beendet werden, wenn die Benutzer es beenden möchten - niemals auf andere Weise. Wenn Sie in Android keine Apps schreiben können, die sich so verhalten, kann Android meiner Meinung nach nicht zum Schreiben von echten Apps verwendet werden = (
Dann können Webanwendungen auch nicht. Oder WebOS , wenn ich das Modell richtig verstehe (ich hatte noch keine Chance, mit einem zu spielen). In all diesen Fällen "beenden" Benutzer nichts - sie gehen einfach. Das iPhone ist insofern etwas anders, als es derzeit nur eine Sache gleichzeitig laufen lässt (mit wenigen Ausnahmen), und das Verlassen des Apps impliziert daher eine ziemlich sofortige Beendigung der App.
Gibt es eine Möglichkeit für mich, die Anwendung wirklich zu beenden?
Wie Ihnen alle anderen gesagt haben, können Benutzer (über BACK) oder Ihr Code (über finish()
) Ihre aktuell ausgeführte Aktivität schließen. Benutzer benötigen für ordnungsgemäß geschriebene Anwendungen im Allgemeinen nichts anderes als eine "Beenden" -Option für die Verwendung von Webanwendungen.
Per Definition sind keine zwei Anwendungsumgebungen gleich. Dies bedeutet, dass Sie Trends in Umgebungen sehen können, wenn neue entstehen und andere begraben werden.
Zum Beispiel gibt es eine wachsende Bewegung, um zu versuchen, den Begriff der "Datei" zu beseitigen. Die meisten Webanwendungen zwingen Benutzer nicht dazu, an Dateien zu denken. iPhone-Apps zwingen Benutzer normalerweise nicht dazu, an Dateien zu denken. Android-Apps zwingen Benutzer im Allgemeinen nicht dazu, an Dateien zu denken. Und so weiter.
In ähnlicher Weise gibt es eine wachsende Bewegung, um zu versuchen, den Gedanken des "Beenden" einer App zu beseitigen. Die meisten Webanwendungen zwingen den Benutzer nicht zum Abmelden, sondern zum impliziten Abmelden des Benutzers nach einer gewissen Zeit der Inaktivität. Gleiches gilt für Android und in geringerem Maße für das iPhone (und möglicherweise für WebOS).
Dies erfordert eine stärkere Betonung des Anwendungsdesigns, die Konzentration auf Geschäftsziele und die Nichteinhaltung eines Implementierungsmodells, das an eine frühere Anwendungsumgebung gebunden ist. Entwickler, denen die Zeit oder die Neigung dazu fehlt, werden von neueren Umgebungen frustriert sein, die ihr bestehendes mentales Modell brechen. Dies ist nicht die Schuld einer der beiden Umgebungen, ebenso wenig wie die Schuld eines Berges für Stürme, die um ihn herum und nicht durch ihn fließen.
In einigen Entwicklungsumgebungen wie Hypercard und Smalltalk wurden beispielsweise die Anwendung und die Entwicklungstools in einem Setup zusammengeführt. Außer bei Spracherweiterungen für Apps (z. B. VBA in Excel , Lisp in AutoCAD ) hat sich dieses Konzept nicht durchgesetzt . Entwickler, die mentale Modelle entwickelten, die die Existenz von Entwicklungstools in der App selbst voraussetzten, mussten daher entweder ihr Modell ändern oder sich auf Umgebungen beschränken, in denen ihr Modell zutreffen würde.
Also, wenn Sie schreiben:
Zusammen mit anderen chaotischen Dingen, die ich entdeckt habe, denke ich, dass die Entwicklung unserer App für Android nicht passieren wird.
Das scheint für Sie im Moment das Beste zu sein. Ebenso würde ich Ihnen davon abraten, Ihre Anwendung auf das Web zu portieren, da einige der Probleme, die Sie mit Android gemeldet haben, auch in Webanwendungen auftreten (z. B. keine "Kündigung"). Oder umgekehrt, ein Tag , wenn Sie tun Port Ihre App im Web, können Sie feststellen , dass die Fluss der Webanwendung eine bessere Übereinstimmung für Android sein kann, und Sie können ein Android - Port zu diesem Zeitpunkt überdenken.