StrictModeDiskReadViolation时

我正在尝试使用SharedPreferences来存储我的应用程序的一些用户设置。 我有这个代码在我的Activity.onCreate方法:

sharedPreferences = context.getSharedPreferences("MMPreferences", 0); soundOn = sharedPreferences.getBoolean("soundOn", true); 

但它给了我这个错误(这是生成错误的getBoolean):

 11-10 16:32:24.652: D/StrictMode(706): StrictMode policy violation; ~duration=229 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=2079 violation=2 

并且结果是值不被读取,而且当我尝试使用此代码写入SharedPreferences(它是生成错误的提交)时,我也得到相同的错误:

 SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("soundOn", soundOn); editor.commit(); 

我发现这个错误的唯一答案是严格的模式警告,但是我的代码实际上无法读写SharedPreferences键/值数据。

Solutions Collecting From Web of "StrictModeDiskReadViolation时"

您必须在单独的线程上执行fileSystem操作,然后错误将消失。

你也可以closuresStrictMode(但我不build议这样做)

 StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy(); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(old) .permitDiskWrites() .build()); doCorrectStuffThatWritesToDisk(); StrictMode.setThreadPolicy(old); 

如果在Android项目中configuration了响应(RxJava),则可以利用其特性,例如在I / O特定的计划程序上计划任务,例如:

 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(); }); }