Редактирование SharedPreferences Editor занимает так много времени - PullRequest
6 голосов
/ 04 февраля 2011

Я пытаюсь выполнить настройку с использованием PreferenceActivity ...

Я нашел несколько рабочих примеров, таких как

"Редактор расширенной конфигурации WiFi"

и

"Wifi Config Editor Pro"

но код, который я написал, ждет в строке 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) dataChanged, но нет участника pkg = 'com.android.providers.settings' uid = 10046

Ответы [ 4 ]

3 голосов
/ 02 августа 2013

commit() выполняется синхронно, поэтому вы заметили, что это занимает так много времени .. Вместо этого используйте apply().

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

2 голосов
/ 02 февраля 2015

Вы должны использовать apply() метод, который является асинхронным. Смотрите документы здесь

2 голосов
/ 07 февраля 2011

Передача больших настроек медленная - это должно быть сделано в отдельном потоке. Рассмотрите возможность реализации этого в AsyncTask

0 голосов
/ 07 февраля 2011

Где ты это делаешь?OnSharedPreferenceChanged?

Если вы используете PreferenceActivity, вам не нужно вручную писать свои префы, так как изменение состояния виджета пользователем должно изменить ключ, определенный в XML для PreferenceActivity.

...