Anwendungskontext für SharedPreferences?

Kann ich ApplicationContext für die Arbeit mit SharedPreferences und zB RemoteService ?

Logischerweise denke ich, dass ich kann. Gibt es irgendwelche Nuancen in einem solchen Ansatz?

  • Unterschied zwischen Aktivitätskontext und Anwendungskontext
  • Wie kann ich die console.log () - Ausgabe in der PhoneGap App mit Eclipse und HTC Desire HD anzeigen?
  • Eine laufende Benachrichtigung leise aktualisieren
  • IllegalStateException beim Ersetzen eines Fragments
  • Wie man einen Seitenindikator für horizontale recyclerview macht
  • Vector Drawables, die automatisch in pngs umgewandelt werden
  • Verringerung der Batterie Auswirkungen von Anwendungen, die Inhalte über ein Smartphone-Radio heruntergeladen
  • Wie benutzt man RippleDrawable programmgesteuert in Code (nicht xml) mit Android 5.0 Lollipop?
  • Wie ändere ich CollapsingToolbarLayout Schriftart und Größe?
  • Android-Menü mit Symbol
  • Android Open-Mailclient programmgesteuert
  • ExoPlayer AudioTrack Stottern
  • 3 Solutions collect form web for “Anwendungskontext für SharedPreferences?”

    Sie sollten den Activity oder Context , dh 'this' , es sei denn, Sie haben einen klaren und starken Grund nicht zu. Verwenden Sie nur ApplicationContext wenn Sie eindeutig einen Verweis auf den globalen Status Ihrer Anwendung benötigen.

    Von Android-Entwickler-API-Dokumente auf ContextWrapper's Methode getApplicationContext() :

    Dies sollte in der Regel nur verwendet werden, wenn man einen Kontext braucht, dessen Lebenszyklus von dem aktuellen Kontext getrennt ist, der an die Lebensdauer des Prozesses und nicht an die aktuelle Komponente gebunden ist.

    und

    Mit dem ApplicationContext (…) [im Gegensatz zu zB einem Activity- oder Service-Kontext] kann man leicht zu ernsthaften Lecks führen, wenn Sie vergessen, sich aufzuheben, zu entbinden usw.

    Um beispielsweise SharedPreferences in einer Activity SharedPreferences um zB die Daten zu ändern, die dem Benutzer angezeigt werden, verwenden Sie this.getSharedPreferences(...) da es keinen klaren Grund gibt, warum Sie den Lebenszyklus der Anwendung nutzen müssen. Gleiche, in einem Service , benutze this.getSharedPreferences(...) . (Beachten Sie, dass Aktivität und Service Kontexte sind. Sie verlängern indirekt android.content.Context )

    CommonsWare hat eine eingehende Antwort geschrieben: Wann soll der Aktivitätskontext ODER Anwendungskontext aufgerufen werden? Wo er den Fall macht, dass das Aufrufen von getApplicationContext () "is almost always wrong" und skizziert die wenigen Ausnahmen, wenn es zu benutzen:

    • Binden von einer Aktivität an einen Dienst.
    • Etwas muss an einen Kontext mit globalen Geltungsbereich gebunden werden.

    CommonsWare auch Links zu einer Antwort von Android Framework Engineer Dianne Hackborn:

    Die erste Regel, die ich dir geben würde: Wenn du nicht weißt, warum du [Anwendungskontext] brauchst, brauchst du es wahrscheinlich nicht (…) Das einzige Mal, dass du getApplicationContext () verwenden willst ist, wenn du einen Kontext brauchst Das außerhalb des Lebenszyklus einer Aktivitätsklasse (oder einer anderen Komponente) existiert.

    Mehr Antworten auf dem gleichen Thema mit Diskussionen zu den Fragen im Zusammenhang mit ApplicationContext :

    • Android: ProgressDialog.show () stürzt mit getApplicationContext ab
    • Unterschied zwischen Aktivitätskontext und Anwendungskontext

    Wie Gunnar Karlsson erwähnte ContextWrappers getApplicationContext () Nutzung ist ziemlich klar, dass man nur Activity oder Dienstkontext verwenden sollte, um Ihren Empfänger zu registrieren / aufzuheben, Ihre Dienste zu binden / zu entbinden (es sei denn, es ist wirklich erforderlich, sich bei statischen Daten zu registrieren, nicht um eine bestimmte Komponente ) Um unsichere Gedächtnislecks zu vermeiden und sicher zu sein, auch wenn Sie manchmal vergessen, sich zu registrieren, wird das System es für Sie mit Warnungen löschen.

    Aber für getSharedPreferences(...) kannst du jeden ApplicationContext oder Context jederzeit ohne Probleme verwenden. Der Grund ist, es wurde deutlich erwähnt

    Für eine bestimmte Reihe von Präferenzen (hier SharedPreferences ) gibt es eine einzelne Instanz dieser Klasse, die alle Clients teilen.

    Nur eine Referenz über den Anwendungskontext zu erhalten, wird die Referenz nicht für immer behalten. Es ist nur ein Hinweis auf die Vorlieben über Anwendungskontext wie jeder andere. So wird es gelöscht, sobald der Benutzer damit fertig ist.

    Bitte beachten Sie, dass die Registrierung eines Empfängers über den Anwendungskontext als globaler Zustand mit Ihrer Anwendung beibehalten wird. So wird es nie für dich geklärt

    Bitte jemand korrigieren mich wenn ich mich irre

    Hoffe das wird dir helfen

    Ja, hier kannst du getApplicationContext() . Sie können getApplicationContext() überall verwenden, wo Sie getBaseContext() oder this Schlüsselwort verwenden, wenn in einer Aktivität oder Dienstleistung, außer für sehr spezifische Fälle wie beim Hinzufügen von Ansichten oder Dialogen zur Benutzeroberfläche.

    Hier ist ein ausgezeichneter Artikel darüber, was Kontext ist und was ist, was ich auf jeden Fall empfehlen würde, durch zu gehen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.