Frage

Ich schaffe Ereignis Suchanwendung, setzen wir Suchkriterien von einem Bildschirm bevölkern in einem anderen Bildschirm dann Kriterien Benutzer bearbeiten können Such vom 3. Bildschirm und geht bis zum 4. Bildschirm.

Um obige Aufgabe zu erfüllen ich bin mit statischem Objekt, das die Werte um die Anwendung erinnern und ich brauche keine Sache zusätzlich zu tun.

Aber ich habe Angst, wenn über statischen Objekt-Lebenszyklus in android, wenn wenig Speicher android löschen statische Objekte gefunden ???

Als Android unterstützt Multi-Tasking, wenn der Benutzer zu einer anderen Anwendung wechselt und wenn der Benutzer kommt starten zurück Anwendung wirkt verrückt, nicht statisches Objekt entfernt, wenn sie multi Aufgabe ??? irgendeine Idee ?? und auch empfehlen, hält statisches Objekt über Singleton-Methode ist besser Ansatz ???

War es hilfreich?

Lösung

Hier kann mit einem wenig Hintergrund starten:? Was passiert, wenn Sie eine Anwendung starten
    Das Betriebssystem startet einen Prozess und weist ihm eine einzigartige Prozess-ID und weist ein Prozess Tabelle.Verfahren Prozess eine Instanz von DVM (Dalvik VM) starten; Jede Anwendung läuft in einem DVM.
Ein DVM verwaltet Klasse Laden Entladen, zB Lebenszyklus, GC etc.

Lebensdauer einer statischen Variablen. Eine statische Variable kommt zustande, wenn eine Klasse von der JVM und Matrizen geladen wird, wenn die Klasse entladen

Wenn Sie also eine Android-Anwendung erstellen und eine statische Variable initialisieren, wird es bis eines der folgenden Ereignisse eintritt in der JVM bleiben:
1. die Klasse unbelastete
2. die JVM Fährt
3. Verfahren stirbt

Beachten Sie, dass der Wert der statischen Variablen wird bestehen bleiben, wenn Sie in eine andere Aktivität einer anderen Anwendung und keine der oben genannten drei geschieht wechseln. Sollte eine der oben genannten drei passieren die statische seinen Wert verlieren wird.

Sie können dies testen, mit ein paar Codezeilen:

  1. drucken Sie das nicht initialisierte statische in onCreate Ihrer Aktivität -> sollte drucken null
  2. initialisieren statisch. drucken Sie es aus -> Wert wäre nicht null
  3. Drücken Sie die Zurück-Taste und gehen Sie auf dem Startbildschirm. . Hinweis: Home-Bildschirm ist eine weitere Aktivität
  4. Starten Sie Ihre Aktivitäten wieder -> die statische Variable nicht null
  5. Töte deinen Bewerbungsprozess von DDMS (Stopp-Taste in der Geräte-Fenster).
  6. Starten Sie Ihre Aktivität. -> die statische wird Nullwert haben

Ich hoffe, das hilft.

Andere Tipps

Nun wird das Singleton-Muster auch basiert auf der Verwendung von statischen Variablen so tatsächlich würden Sie in der gleichen Position sein. Während der statischen Ansatz die meisten der Zeit arbeiten kann, kann es, dass in einigen Fällen geschehen, wenn der Speicher voll ist und eine andere Betätigung den Vordergrund, bevor die Anwendung bewegt sich in seiner nächsten Bildschirm, um Ihren Aktivität des getötet werden könnten, und Sie die statischen Werte verlieren. Allerdings Android bietet ein paar Optionen von Werten zwischen den Staaten anhält oder sie wie zu übertragen:

  • Geben Sie eine Intent verwenden, können Sie passieren entlang Ihre Suchkriterien aus der Tätigkeit zu Aktivität (ähnlich einem Web-HTTP Anfrage)
  • mit Anwendungseinstellungen, Sie könnten die Werte speichern und abrufen sie in der Tätigkeit, die sie
  • braucht
  • die SQLite-Datenbank verwenden Sie können bestehen sie in einer Tabelle und abrufen sie später
  • , wenn Sie nur speichern Aktivität brauchen Zustand, so dass bei einem Neustart werden die Felder erhalten gefüllt mit ihren zuvor ausgewählte Werte, können Sie implementieren die onSaveInstanceState () -Aktivität Verfahren - zur Kenntnis, dass dies nicht für zwischen Aktivitäten empfohlen persistance von Staaten.

Sie können einige Code-Beispiele für die Nutzung von Präferenzen, Absichten und die SQLite-Datenbank erhalten, indem auf dem aegisshield Quellcode Baum in google Code oder in anderen Open-Source-Android-Anwendungen.

Nach einigen Recherchen stellt sich heraus, dass zum Speichern von Singletons mit Anwendung ist nicht so groß von einer Idee, es sei denn, Sie sind bereit, es neu zu erstellen:

Speichern Sie keine Daten in das Anwendungsobjekt

die akzeptierte Antwort ist technisch korrekt, es ist nicht alle Informationen bereitstellt.

Als Link oben schon sagt, wenn Sie wirklich mit diesem Modell bleiben möchten, müssen Sie bereit sein, für null zu überprüfen und die Daten wiederherzustellen, wenn möglich.

@ r1k0 ist hier richtig. Das Speichern von Daten in statischen Feldern einer Klasse wird nicht alleine bleiben in Bewerbungsverfahren kills und startet neu. Android routinemäßig tötet Prozesse (laufende Anwendungen), wenn es benötigt Speicher.

Per Android doc: Aktivitätszustand und Auswurf aus dem Speicher ,

  

Das System tötet nie direkt eine Aktivität. Stattdessen es tötet die   Verfahren, bei denen die Aktivität läuft, zerstört nicht nur die Aktivität   aber alles andere im Prozess ausgeführt wird, als auch.

Sie können den Status von Primitiven sowie Serializable und Parcel Objekte mithilfe der folgenden Methoden speichern und wiederherzustellen. Diese werden automatisch während der normalen Aktivität Lebenszyklus genannt.

protected void onSaveInstanceState(Bundle state) {}
protected void onRestoreInstanceState(Bundle savedInstanceState){}

Also, wenn Sie eine Klasse, die nur statische Variablen hat, können Sie den Zustand jedes Feld in onSaveInstanceState () speichern und diese wiederherstellen, in onRestoreInstanceState (). Wenn Android den Prozess tötet, dass Ihre Anwendung läuft in ist, wird der Zustand Ihrer Variablen gespeichert werden, und wenn Android App wieder herstellt, werden die Werte im Speicher nach wie vor in dem gleichen Zustand wieder hergestellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top