Android Commit vs. Apply


Exemple

La méthode editor.apply() est asynchrone , alors que editor.commit() est synchrone .

De toute évidence, vous devriez appeler apply() ou commit() .

2.3
SharedPreferences settings = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(PREF_CONST, true);
// This will asynchronously save the shared preferences without holding the current thread.
editor.apply();
SharedPreferences settings = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(PREF_CONST, true);
// This will synchronously save the shared preferences while holding the current thread until done and returning a success flag.
boolean result = editor.commit();

apply() été ajouté dans 2.3 (API 9), il valide sans retourner un booléen indiquant le succès ou l'échec.

commit() renvoie true si la sauvegarde fonctionne, false sinon.

apply() été ajouté, car l'équipe de développement Android a remarqué que presque personne ne prenait note de la valeur de retour, donc, appliquer est plus rapide car elle est asynchrone.

Contrairement à commit() , qui écrit ses préférences dans le stockage persistant de manière synchrone, apply() SharedPreferences immédiatement les modifications apportées à la SharedPreferences mémoire, mais lance une validation asynchrone sur le disque. Si un autre éditeur de cette SharedPreferences effectue un commit() normal commit() alors qu'un apply() est toujours en attente, le commit() bloquera jusqu'à ce que tous les commits asynchrones (s'appliquent) ainsi que tous les autres commits de synchronisation en attente.