Anwendungskontext für SharedPreferences?
Kann ich ApplicationContext
für die Arbeit mit SharedPreferences
und ab, zum Beispiel RemoteService
?
Logisch, ich denke, dass ich kann. Gibt es irgendwelche Nuancen in einem solchen Ansatz?
- Was ist falsch mit dieser Frage? Ist es zu dummy?
- Denke es gibt keine Menschen gesehen die Frage, wer kann eine Antwort geben 🙁
- Schau dir das an, vielleicht hilft es: stackoverflow.com/questions/987072/...
- Ich habe gesehen, Ihre Kommentare und dachte ein wenig nach bounty mi8 helfen; und es klappte 😛
- Erweiterung Ajay Antwort, es ist eine gute Erklärung hier: SharedPreferences Anwendungskontext vs-Aktivität Kontext
Du musst angemeldet sein, um einen Kommentar abzugeben.
als Gunnar Karlsson erwähnt ContextWrapper ist getApplicationContext() Nutzung seine ziemlich klar, dass Sie sollten nur verwenden
Activity
oderService
Kontext auf anmelden/Abmelden Ihre Empfänger, bind/unbind Ihre Dienstleistungen (, es sei denn, es ist wirklich erforderlich, sich zu registrieren mit statischen Daten, die nicht einer bestimmten Komponente) zu vermeiden, unsicher, memory-leaks und um sicher zu sein, auch wenn Sie manchmal vergessen, um die Registrierung, das system wird klar, dass es für Sie mit Warnungen.Aber, für
getSharedPreferences(...)
Sie können immer irgendwelcheApplicationContext
oderContext
ohne eine Anhängevorrichtung. Die Grund ist, wurde klar erwähntImmer nur eine Referenz, die über den application context wird nicht halten Sie die Referenz für immer. Es ist nur ein Verweis auf die Präferenzen über den application context wie jeder andere. So wird es gelöscht, sobald der Benutzer ist fertig.
Bitte beachten Sie, dass die Registrierung eines Empfängers über den application context wird erhalten bleiben, wie die Globale Staat im Zusammenhang mit Ihrer Anwendung. So wird es nie sein gelöscht für Sie.
Bitte jemand korrigieren Sie mich, wenn ich falsch bin.
Hoffe, dies wird Ihnen helfen.
Sollten Sie die
Activity
oderService
Context
, d.h.'this'
, es sei denn, Sie haben eine klare und starke Grund, nicht zu. Verwenden Sie nurApplicationContext
wenn Sie brauchen eindeutig einen Verweis auf den globalen Zustand der Applikation.Vom Android-Entwickler-API-docs auf
ContextWrapper s
getApplicationContext()
Methode:und
Beispielsweise zum abrufen
SharedPreferences
in einemActivity
um z.B. Daten zu verändern, das dem Benutzer angezeigt wird, verwenden Siethis.getSharedPreferences(...)
da gibt es keinen klaren Grund, warum würden Sie brauchen, um Tippen Sie in der Anwendung Lebenszyklus. Gleich, in einerService
verwendenthis.getSharedPreferences(...)
. (Beachten Sie, dass Aktivität und Service Zusammenhängen. Sie indirekt verlängernandroid.content.Context
)CommonsWare geschrieben hat, eine in die Tiefe gehende Antwort: Wenn zu call activity Kontext und Anwendungskontext?, wo er den Fall, dass der Aufruf getApplicationContext()
"is almost always wrong"
ist, und beschreibt die wenigen Ausnahmen, wenn es zu benutzen:CommonsWare auch links, die auf eine Antwort vom Android-Framework-Ingenieurin Dianne Hackborn:
Mehr Antworten auf das gleiche Thema mit Diskussionen über die Fragen im Zusammenhang mit
ApplicationContext
:Ja, Sie können
getApplicationContext()
für, die. Sie könnengetApplicationContext()
überall, das Sie verwendengetBaseContext()
oder diethis
Schlüsselwort, wenn eine Aktivität oder Dienstleistung, außer für sehr spezielle Fälle wie beim hinzufügen von Ansichten oder Dialogen der Benutzeroberfläche.Hier ist ein ausgezeichneter Artikel darüber, was Kontext ist und was es tut, ich würde auf jeden Fall empfehlen, geht durch.