【问题标题】:Synchronization issue SharedPreferences?同步问题 SharedPreferences?
【发布时间】:2015-05-03 15:52:18
【问题描述】:

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

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

【问题讨论】:

  • 您在哪里以及如何访问首选项值。您是否实现了偏好侦听器?
  • 我从 Service 类的子类的公共静态方法访问它。该方法有一个输入参数 Context,我使用 Context.getSharedPreferences 访问 Preference 和 SharedPreferences.Editor.putLong 写入 Preference。

标签: java android multithreading sharedpreferences


【解决方案1】:

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

public synchronized void modifyPreferences(long input)
{
    //Do some stuff
}

SharefPreferences documentation 表示使用 apply() 与 commit() 保存您的编辑:

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

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多