AndrPills: Commit Vs Apply

Hoy 4 de Agosto, día en el que arrancan las fiestas de La Blanca con su tradicional Chupinazo (Vitoria-Gasteiz), me he calentado y doy por inaugurada la sección AndrPills en mi txoko digital. La sección pretende aportar pequeñas píldoras de conocimiento que ofrezcan valor a los desarrolladores en algún momento.

Vamos con la primera píldora

Desconocía la existencia del método apply() perteneciente a la interface SharedPreferences.Editor, siempre he usado commit(),  y me ha parecido interesante describir en esta píldora la principal diferencia entre ambos.

commit()

Se trata de un método síncrono que nos permite modificar el valor de un determinado campo del fichero de SharedPreferences que hayamos definido (podemos tener varios). Además, nos devuelve un valor booleano indicando el resultado de la operación (éxito | fracaso) .

Si varios editores tratan de modificar una entrada del fichero en el mismo momento, el último commit() será el vencedor.

apply()

Al igual que el método commit(), nos permite modificar el valor de un determinado campo del fichero de SharedPreferences pero no nos devuelve ninguna respuesta informando del resultado de la operación.

La diferencia…

Mientras que el método commit() es un método síncrono que nos devuelve en forma de booleano si la operación se ha efectuado con éxito o no. El método apply(), aunque escribe inmediatamente en memoria los cambios indicados, realizará de forma asíncrona la escritura en disco de los mismos (perfectamente gestionado por el sistema :P). Por este motivo, no devuelve resultado alguno al usarlo.

Importante

Esta diferencia implica una consecuencia importante en el momento en que sobre un fichero de SharedPreferences actúan varios editores. Si en un momento dado efectuamos modificaciones mediante el método apply() y posteriormente realizamos nuevas operaciones de escritura sobre el mismo fichero, esta vez con el método commit(). Estas últimas deberán esperar hasta que las primeras se hayan ejecutado por completo (escrito en disco).

Hasta la próxima ingesta 😉

Enlaces de interés

SharedPreferences.Editor | https://developer.android.com/reference/android/content/SharedPreferences.Editor.html

Txoko en Wikipedia | https://es.wikipedia.org/wiki/Txoko

Fiestas de La Blanca | https://es.wikipedia.org/wiki/Fiestas_de_La_Blanca

  • contacto@pinicius.com
  • (+34) 616810829