SharedPreferences编辑器提交需要太长时间

6

我试着使用PreferenceActivity来制作一个配置活动...

我找到了一些可行的例子,比如

"WiFi高级配置编辑器"

"Wifi配置编辑器Pro"

但是我写的代码在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) 数据已更改但没有参与者 pkg='com.android.providers.settings' uid=10046


备份管理器服务的聊天与您的问题无关。 - Android Dev Dude
4个回答

3

2

提交大型偏好设置很慢 - 应该在单独的线程中完成。考虑在AsyncTask中实现此操作。


请查看这个链接:link,没有线程,但也没有等待...我不明白重点在哪里... - caw
我不知道这个应用程序是否运行得足够快。要了解详细情况,请查看这个问题(尤其是Brad Fitzpatrick回答中的第四点):should-accessing-sharepreferences-be-done-off-the-ui-thread - pixel
我会在方便的时间尝试使用FutureTask。 - caw

2
你应该使用异步的apply()方法。请参考此处的文档。

0
你是在哪里做这个?在OnSharedPreferenceChanged吗?
如果你正在使用PreferenceActivity,你不需要手动编写你的首选项,因为用户改变小部件状态应该会改变在XML中为PreferenceActivity定义的键。

我正在做的是在另一个活动的按钮onclicklistener上使用PreferenceActivity之前。 - caw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接