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

发布于 2024-10-16 00:24:12 字数 970 浏览 7 评论 0原文

我尝试使用PreferenceActivity进行配置活动...

我发现了一些工作示例,例如

“WiFi高级配置编辑器”

“Wifi配置编辑器专业版”,

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

这是简短的代码;

...

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

I try to make a configuration activity using PreferenceActivity...

I found some working examples like

"WiFi Advanced Configuration Editor"

and

"Wifi Config Editor Pro"

but the code I wrote waits for 10-15 seconds on the line editor.commit()...
it must be very simple but I cant figure out.

here is the brief code;

...

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();

Any ideas??

Update: one more thing. I saw these warnings in the log file

W/BackupManagerService(1914)
dataChanged but no participant
pkg='com.android.providers.settings'
uid=10046

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

那请放手 2024-10-23 00:24:12

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

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

commit() is executed synchronously, so you notice that it takes so much time..
Use apply() instead.

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

眼前雾蒙蒙 2024-10-23 00:24:12

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

Committing large preferences is slow - it should be done in separate thread. Consider implementing this in AsyncTask

罗罗贝儿 2024-10-23 00:24:12

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

You should use apply() method which is asynchronous. See docs here

触ぅ动初心 2024-10-23 00:24:12

你在哪里做这个?关于共享首选项更改?

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

Where are you doing this? OnSharedPreferenceChanged?

If you're using a PreferenceActivity, you shouldn't need to manually write your prefs, as changing widget state by the user should change the key defined in XML for the PreferenceActivity.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文