同步问题 SharedPreferences?

blo*_*age 3 java multithreading android sharedpreferences

我在我的应用程序的一个类中有一个公共静态方法,它在递增后将一个数字保存到 SharedPreferences。例如,如果首选项值是等于 1 的 long,则该方法会将 1 的首选项读入一个 long 变量,然后将其增加到 2,并将该 long 放回首选项中。

我需要担心同步问题吗?起初我不这么认为,因为我的应用程序不是多线程的,对吗?它使用 Android 服务,但我认为这也只是单线程的。

Sam*_*awy 6

Java 有一个解决方案,Synchronization只需在synchronized结构中实现该方法,如下所示”

public synchronized void modifyPreferences(long input)
{
    //Do some stuff
}
Run Code Online (Sandbox Code Playgroud)

SharefPreferences 文档说明了使用apply()vscommit()保存您的编辑:

使用apply(),注意当两个编辑器同时修改首选项时,最后一个调用apply的人获胜。

与将其首选项同步写入持久存储的 commit() 不同,apply() 立即将其更改提交到内存中的 SharedPreferences,但会启动对磁盘的异步提交,并且您不会收到任何失败通知。如果此 SharedPreferences 上的另一个编辑器在 apply() 仍然未完成时执行常规 commit(),则 commit() 将阻塞,直到完成所有异步提交以及提交本身。

我希望这有帮助。