El almacenamiento en un dispositivo movil está marcado por el tamaño y la forma de recuperar los datos de las mismas. Por ello hay que buscar métodos que permitan una optimización de las tareas de forma que el dispositivo consuma muchos recursos. Android nos ofrece un mecanismo de almacenamiento ligero basado en un archivo xml con un par clave valor. Este método llamado Shared preferences genera un archivo en el directorio de creación del proyecto.

Utilizar el fichero de preferencias

Para poder obtener una referencia del fichero de almacenamiento tan solo hay que igualar el objeto de tipo SharedPreference a getActivity() indicándole el modo de uso que tendría el archivo. Este tipo puede ser por cualquier paquete o únicamente por el paquete. Esta segunda opción es la que se utiliza por seguridad mediante un MODE_PRIVATE

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

De esta forma se podrá empezar a utilizar el fichero de almacenamiento. Las posibilidades que hay para poder trabajar son dos: guardar elementos o recuperar elementos

Guardar elementos

Para guardar elementos dentro del xml se necesita una instancia de tipo SharedPreference.Editor la cual se obtiene a través del objeto generado en el punto anterior.Con este objeto generado tan solo se necesita utilizar los métodos de putTipoElemento() mediante un par clave-valor y el método commit() para asegurar la transacción . De esta forma en el archivo xml se creará una etiqueta con la clave indicada y el valor guardado

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(TAG_RECORDAR,checkBox.isChecked());
editor.commit();

Recuperar elementos

Para poder recuperar elementos tan solo se necesita llamar el método getTipoElemento() donde hay que indicarle la clave a recuperar y el valor por defecto en el caso de no encontrarla. También se puede llamar al método get() el cual devuelve un objeto de tipo Map con todos los par clave valor

Boolean creado = sharedPreferences.getBoolean(TAG_RECORDAR,false);
checkBox.setChecked(creado)

Hay que tener mucho cuidado en la parte de la activity en la que se utilizan estos métodos ya que no siempre hay que utilizarlos en el método onCreate. Lo normal es guardar las shared cuando se cierra o pausa la actividad y recuperarlas cuando se crean

public class SharedActivity extends AppCompatActivity {

    CheckBox checkBox;
    String TAG_RECORDAR="recordad";
    SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shared);
        checkBox = (CheckBox) findViewById(R.id.check_recordad);
        sharedPreferences = getPreferences(MODE_PRIVATE);
        recuperarDatos();
    }

    private void recuperarDatos() {
        if(sharedPreferences !=null){
            Boolean creado = sharedPreferences.getBoolean(TAG_RECORDAR,false);
            checkBox.setChecked(creado);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(TAG_RECORDAR,checkBox.isChecked());
        editor.commit();
    }
}

Manejar eventos asociados

Si se quiere evaluar en todo momento si alguno de los parámetros de las preferencias se ha cambiado se puede hacer registrando un escuchador sobre las shared. Para ello mediante la interfaz OnSharedPreferenceChangeListener se obtiene tanto la clave modificada como el elemento asociado

sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
        Log.v("test","Clave modificada "+s);
        Log.v("test","Elemento guardado:"+sharedPreferences.getBoolean(s,false));
    }
});

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(TAG_RECORDAR,checkBox.isChecked());
        editor.commit();
    }
});