2011-02-04 2 views
3

я пытаюсь сделать деятельность конфигурации с использованием PreferenceActivity ...SharedPreferences редактор совершить занимает так много времени

я нашел некоторые рабочие примеры, как

"WiFi Advanced Editor Configuration"

и

"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

+0

Беспокойство BackupManagerService не имеет ничего общего с вашей проблемой. –

ответ

2

Совершение большие предпочтения медленно - это должно быть сделано в отдельном потоке. Подумайте об этом в AsyncTask

+0

, но продолжительность не изменится правильно? – caw

+0

Продолжительность будет продолжаться, но вы не будете блокировать поток пользовательского интерфейса. – pixel

+0

проверьте это, пожалуйста. [Link] (http://code.google.com/p/android-wifi-ace/source/browse/trunk/WiFiACE/src/org/marcus905/wifi/ace/WiFiACEList.java ? r = 11) нет потоков, но и не ждет ... я не могу получить точку ... – caw

0

Где вы это делаете? OnSharedPreferenceChanged?

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

+0

im, делая это перед использованием PreferenceActivity на кнопке другого действия onclicklistener. – caw

2

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