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.

  • Come i valori di Gravity influenzano PopupWindow.showAtLocation () in Android
  • Qual è il ruolo degli adattatori in Android?
  • getConnectionInfo () exception
  • Quale adattatore dovrei usare per utilizzare HashMap in un ListView
  • Actionbarsherlock + tabs + multi frammenti?
  • Disegnabile a byte
  • 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.

  • Colbind punti sulla mappa con le righe
  • errore (1, -2147483648) su Android
  • android startActivity dall'intento in servizio
  • Android Studio: come generare apk firmato utilizzando Gradle?
  • Che cosa è il file keystore di Android e per quale utilizzo?
  • Google Maps v2 Imposta Livello Zoom
  • 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.