SharedPreferences context applicazione vs context di attività

Sto utilizzando diverse SharedPreferences per memorizzare i dati nella mia app. Alcune preferenze vengono utilizzate in molte attività.

So che le SharedPreferences sono supportte internamente da una mappa per l'accesso veloce e scritto a sdcard quando le impostazioni vengono modificate.

  • Android: Cambia scheda Colore del text Programmaticamente
  • Flip card transizione tra due attività Android
  • Android: Forza il routing audio
  • come generare file Pdf con image in android?
  • L'icona di avvio mancante in Android
  • Tentare di utilizzare l'API Zxing QR reader codice risultati in vigore vicino
  • Mi chiedo quale sia il modo migliore se si accede a una preferenza condivisa da molte attività:

    1. Inserire in each attività utilizzando il context di attività.
    2. Inserire in each attività, ma utilizzando il context dell'applicazione.
    3. Metterlo ad esempio nella class Applicazione e farlo istantaneare solo una volta, simile a un singolo.

    Se uso 1. soluzione c'è un object sharedpreference per each attività? E la mappa interna della condivisa viene distrutta quando l'attività viene distrutta?

    Se uso la soluzione 2. ci sarà solo un'istanza, anche se chiamo getSharedPreferences in each attività? E la mappa interna sarà in memory finché l'applicazione è viva?

    Speriamo che qualcuno sa come Android gestisce internamente.

  • Problema di controllo della connettività internet di Android
  • Recupera dati da DB Sqllite tra due date android
  • android: ricevitore di trasmissione per schermata e spegnimento
  • Imansible trovare la versione di Strumenti di revisione 23.0.1
  • Riutilizzare il codice del menu Opzioni
  • Il comportmento personalizzato di CoordinatorLayout a destra di Toolbar con AppBarLayout
  • 3 Solutions collect form web for “SharedPreferences context applicazione vs context di attività”

    Vale la pena di rivedere le fonti che dimostrano che un'istanza Context (sia un'attività che un'istanza di Application ) condividono la stessa mappa statica HashMap<String, SharedPreferencesImpl> .

    Quindi, each volta che si richiede un'istanza di SharedPreferences con lo stesso nome tramite Context.getSharedPreferences(name, mode) si ottiene la stessa istanza poiché controlla prima se la mappa contiene già l'istanza SharedPreferences per un tasto (che è il nome passato). Una volta che SharedPreferences istanza SharedPreferences viene caricata, non verrà caricata di nuovo, ma viene prelevata dalla mappa.

    Quindi in realtà non import quale sia la tua strada, la cosa importnte è usare lo stesso nome per get gli stessi pref di diverse parti dell'applicazione. Tuttavia, creare un singolo "punto di accesso" per i prefs potrebbe essere un vantaggio. Quindi potrebbe essere un singolo wrapper sopra i prefs istantanei in Application.onCreate() .

    SharedPreferences sono gestite internamente da Android come singleton. Puoi get il maggior numero di istanze che desideri:

     context.getSharedPreferences(name, mode); 

    fintanto che utilizzi lo stesso nome , otterrai sempre la stessa istanza . Pertanto non esistono problemi di concorrenza.

    Preferirei di usare una class singleton per preferenza, inizializzare preferenza una sola volta dal context applicativo . creare methods getter e setter (get / put) per aggiungere, aggiornare ed eliminare i dati.

    In questo modo creerà un'istanza una volta e può essere più leggibile, riutilizzabile.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.