4

我创建了一个服务,一旦用户将它放在主屏幕上,它就会写入一些关于小部件的信息(信息是从 confutation 活动中获取的)..我还记下用户设置的小部件的数量。

用户删除小部件后,我会在共享首选项中删除该信息。

我所经历的是,如果用户放置例如 2 个小部件,然后删除一个,然后再放置一个,快速执行所有这些操作,则共享首选项文件中的值不一致。有时它可以正常工作,但大多数时候我会遇到错误的值。

我正在使用apply(),我尝试过提交但同样的事情发生了。

我存储在共享首选项中的值对于系统的工作至关重要,没有它,小部件将毫无用处,因为它们是基于写入首选项的用户配置的来自互联网的信息的备份。

切换到数据库解决方案是否更可靠或任何其他可行的解决方案可以解决这种“竞争条件”?(可能会强制我自己的同步机制,但据我从文档中了解到,apply() 已经同步,并且读/写应该首先进入 RAM,这应该使它更快,我不应该遇到任何问题,例如这是因为用户无法在物理上设法删除一个小部件并放置一个新的小部件,速度快于 2-3 秒!)

4

1 回答 1

0

尝试使用synchronized关键字来处理SharedPreferences本身。例如,当在 Android 应用程序的 SharedPreferences 中设置应用程序字符串时,可以使用以下方法:

public synchronized static void setAppString(Context context, String pref,
                                             String val) {
    SharedPreferences sp = context.getSharedPreferences(
            APP_PREFS_UNIQUE_ID, Context.MODE_PRIVATE);
    Editor editor = sp.edit();
    editor.putString(pref, val);
    editor.commit();
}

对于少数/简单的键值对,您可能不需要数据库范例的开销。

于 2013-08-13T15:09:43.267 回答