StrictModeDiskReadViolation cuando
Estoy intentando utilizar SharedPreferences para almacenar algunas configuraciones de usuario para mi aplicación. Tengo este código en mi método de Activity.onCreate:
sharedPreferences = context.getSharedPreferences("MMPreferences", 0); soundOn = sharedPreferences.getBoolean("soundOn", true);
Pero me da este error (es el getBoolean que genera el error):
11-10 16:32:24.652: D/StrictMode(706): StrictMode policy violation; ~duration=229 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=2079 violation=2
Y el resultado es que el valor no se lee y también obtengo el mismo error cuando intento escribir en SharedPreferences con este código (es el commit que genera el error):
SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("soundOn", soundOn); editor.commit();
Las únicas respuestas para este error que puedo encontrar es acerca de una advertencia de modo estricto, pero mi código realmente no puede leer / escribir los datos SharedPreferences clave / valor.
Debe hacer las operaciones del sistema de archivos en un hilo separado, entonces el error desaparecerá.
También puede desactivar el StrictMode (pero no estoy recomendando que)
StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy(); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old) .permitDiskWrites() .build()); doCorrectStuffThatWritesToDisk(); StrictMode.setThreadPolicy(old);
Si tiene reactivo (RxJava) configurado en su proyecto de Android, puede aprovechar sus propiedades como programar una tarea en un programador específico de E / S, por ejemplo:
public void saveFavorites(List<String> favorites) { Schedulers.io().createWorker().schedule(() -> { SharedPreferences.Editor editor = mSharedPreferences.edit(); Gson gson = new Gson(); String jsonFavorites = gson.toJson(favorites); editor.putString(Constants.FAVORITE, jsonFavorites); editor.apply(); }); }