Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步问题SharedReferences?_Java_Android_Multithreading_Sharedpreferences - Fatal编程技术网

Java 同步问题SharedReferences?

Java 同步问题SharedReferences?,java,android,multithreading,sharedpreferences,Java,Android,Multithreading,Sharedpreferences,我在我的应用程序的一个类中有一个公共静态方法,它在递增后将一个数字保存到SharedReferences。例如,如果首选项值是等于1的long,则该方法将把1的首选项读入一个long变量,然后将其递增为2,然后将该long返回到首选项中 我是否需要担心同步问题?一开始我不这么认为,因为我的应用程序不是多线程的,对吗?它使用Android服务,但我认为这也是单线程的。Java有一个同步的解决方案,只需在同步的结构中实现该方法,如下所示“ SharefPreferences说明如何使用apply()

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


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

Java有一个
同步的解决方案,只需在
同步的
结构中实现该方法,如下所示“

SharefPreferences
说明如何使用
apply()
vs
commit()
保存编辑:

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

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


我希望这能有所帮助。

您在哪里以及如何访问首选项值。您是否实现了首选项侦听器?类似的问题:我正在从服务类的子类的公共静态方法访问它。该方法的输入参数为Context,我使用Context.getSharedReferences访问首选项和SharedReferenceces.Editor.putLong以写入首选项。
public synchronized void modifyPreferences(long input)
{
    //Do some stuff
}