Frage

Ich habe einen Singleton, die einige umsichtige Informationen über den Benutzer meiner Anwendung speichert. Im Moment, speichert er das Login des Benutzers und der Standort des Benutzers.

1) Der Standort wird über einen Dienst gefunden. Im Moment wird der Dienst meine Singleton direkt die Länge und Breite hinein zu stopfen. Ich möchte einen BroadcastReceiver verwenden, um eine Sendung zu senden, dass die Singleton hört und verwendet die Werte zu aktualisieren, statt.

Um jedoch die BroadcastReceiver zu registrieren, ich brauche einen Kontext in meinem Singleton. Was ist der slickest Weg zu erreichen, was ich will. Ist BroadcastReceiver möglicherweise nicht das entsprechende Objekt?

2) Auch, was Probleme sind ich auf der Suche auf mit einem Singleton mit? Ich gehe davon aus, dass Android wird möglicherweise diesen Speicher zu einem bestimmten Zeitpunkt zurückzufordern (was wäre natürlich schlecht sein); so wie kann ich das verhindern? Würde im Antrag des Context vorbei und es in einer Membervariable thwart diese Speicherung?

Die Android-Dokumentation heißt es: „Aber der Lebenszyklus eines statisch ist nicht gut unter Kontrolle, so von dem Lebenszyklusmodell zu halten, soll die Anwendungsklasse initiiert und abzureißen diese statischen Objekte in der onCreate () und OnTerminate () Methoden der Anwendungsklasse,“aber ich bin nicht ganz sicher, wie dies zu erreichen.

War es hilfreich?

Lösung

Um jedoch die BroadcastReceiver zu registrieren, ich brauche einen Kontext in meinem Singleton. Was ist der slickest Art und Weise zu erreichen, was ich will. Ist BroadcastReceiver möglicherweise nicht die geeignete> Objekt?

Der „slickest Weg“ ist nicht zu tun, was Sie tun. Bitte registrieren Sie nur eine BroadcastReceiver von einem Activity, Service oder vielleicht ein Application. Sie muss austragen dieses BroadcastReceiver wenn die Activity, Service oder Application zerstört wird.

Ich gehe davon aus, dass Android wird möglicherweise diesen Speicher zu einem bestimmten Zeitpunkt zurückfordern (was würde offensichtlich schlecht sein); so wie kann ich das verhindern?

Sie dies nicht tun. Android behält sich das Recht vor Vorgang jederzeit zu beenden (beispielsweise Speicher zurückzufordern). Task-Killer auf Android 2.1 und früheren wird Ihren Prozess jederzeit beenden. Sobald alle Komponenten der Anwendung zerstört werden, Android kann Ihren Prozess jederzeit bereitet sie auf, Ihre Haufen zugleich Ausräumen. Und so weiter.

Nur Dinge in Erinnerung setzen, dass Sie nicht verlieren nichts dagegen.

Am besten ist es Ihre „Anwendung“ zu denken, als Korb von losen gekoppelten Komponenten, nicht als monolithische Einheit.

Würde vorbei in den Kontext der Anwendung und in einer Membervariable thwart Speichern das?

Nein.

Die Android-Dokumentation heißt es: „Aber der Lebenszyklus eines statisch ist nicht gut unter Ihrem Steuerung; so durch das Lebenszyklusmodell zu halten, sollte die Anwendungsklasse initiieren und reißen diese statischen Objekten im onCreate () nach unten und OnTerminate () Methoden der Anwendungsklasse,“aber ich bin nicht ganz sicher, wie dies zu erreichen.

Erstellen Sie eine Unterklasse von Application und zeigt im Manifest, dass Android es verwendet werden soll, über das android:name Attribut auf dem <application> Elemente.

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