为什么SharedPreferences.Editor.apply()不立即应用?

时间:2016-08-06 09:45:30

标签: android sharedpreferences

我有两个应用程序。
第一个应用拥有apply,应用会通过MODE_WORLD_READABLE方法向其保存一些数据。

第二个应用程序从第一个应用程序中读取首选项(第一个应用程序使用SharedPreferences保存首选项)并使用它们自行配置。

就是这样。

有一个偏好键" x"。 这两个应用程序同时运行 第一个应用程序更改了与" x"
匹配的值 而第二个应用程序没有做任何改变 重新启动第二个应用程序后,它确实会进行更改。 为什么会出现这个问题? 每当我需要从第一个应用程序中读取某些值时,是否必须更新$data = []; foreach($input as $entry) { if(empty($data[$entry->type])) { $data[$entry->type] = 0; }else{ $data[$entry->type] += $entry->value; } } 引用?

2 个答案:

答案 0 :(得分:0)

SharedPreferences.apply()在线程(异步)中完成工作,因此可能需要一些时间。因此,在第二次打开它之后你可以看到变化。如果你想立即使用.commit()代替。但它会在UI线程中完成工作,因此不建议

答案 1 :(得分:0)

尝试使用MODE_MULTI_PROCESS而不是MODE_WORLD_READABLE

MODE_MULTI_PROCESS:即使已经加载了共享首选项实例,此方法也会检查首选项的修改