【问题标题】:SharedPreferences Editor commit takes so much timeSharedPreferences Editor 提交花费了很多时间
【发布时间】:2011-06-21 05:11:45
【问题描述】:

我尝试使用 PreferenceActivity...

进行配置活动

我找到了一些工作示例,例如

“WiFi 高级配置编辑器”

和

“Wifi 配置编辑器专业版”

但我编写的代码在editor.commit() 行上等待了 10-15 秒... 它一定很简单,但我想不通。

这里是简要代码;

...

SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(v.getContext());
prefs.registerOnSharedPreferenceChangeListener(ClassConfig.this);

    SharedPreferences.Editor editor = prefs.edit();
editor.clear();

editor.putString("key1", value1);
editor.putString("key2", value2);
editor.putBoolean("key3", value3);
    ...
    //i got nearly 35 keys here
    ...
    editor.putString("key33", value33);
editor.putBoolean("key34", value34);
editor.putBoolean("key35", value35);

    editor.commit();

有什么想法吗??

更新:还有一件事。我在日志文件中看到了这些警告

W/BackupManagerService(1914) dataChanged 但没有参与者 pkg='com.android.providers.settings' uid=10046

【问题讨论】:

  • BackupManagerService 喋喋不休与您的问题无关。

标签: android preferences sharedpreferences


【解决方案1】:

您应该使用异步的apply() 方法。请参阅文档here

【讨论】:

    【解决方案2】:

    commit() 是同步执行的,所以你注意到它需要很多时间.. 请改用apply()。

    https://stackoverflow.com/a/5960743/1233659

    【讨论】:

      【解决方案3】:

      你在哪里做这个? OnSharedPreferenceChanged?

      如果您使用的是 PreferenceActivity,则不需要手动编写首选项,因为用户更改小部件状态应该会更改 XML 中为 PreferenceActivity 定义的键。

      【讨论】:

      • 我在对另一个活动的按钮 onclicklistener 使用 PreferenceActivity 之前这样做了。
      【解决方案4】:

      提交大型首选项很慢 - 应该在单独的线程中完成。考虑在AsyncTask 中实现这个

      【讨论】:

      • 请检查一下.. link 没有线程,但也没有等待......我不明白这一点......
      • 我不知道这个应用程序是否运行得足够快。如需解释,请查看此问题(尤其是 Brad Fitzpatrick 答案中的第 4 个项目符号):should-accessing-sharepreferences-be-done-off-the-ui-thread
      • 我会在方便的时候尝试futuretask。
      猜你喜欢
      • 2017-05-10
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多