2011-02-04 50 views
3

我儘量讓使用PreferenceActivity配置活動...SharedPreferences編輯提交花費如此多的時間

我發現了一些工作的例子一樣

「無線網絡高級配置編輯器」

「Wifi配置編輯器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聊天與您的問題無關。 – 2011-02-07 15:07:05

回答

2

投入大量的喜好這些警告很慢 - 它應該在單獨的線程中完成。考慮在AsyncTask

+0

但持續時間不會改變嗎? – caw 2011-02-07 15:02:55

+0

持續時間將持續,但您不會阻止UI線程。 – pixel 2011-02-07 15:04:46

0

中執行此操作你在做什麼? OnSharedPreferenceChanged?

如果您使用的是PreferenceActivity,則不需要手動編寫您的prefs,因爲用戶更改小部件狀態應更改PreferenceActivity的XML中定義的鍵。

2

您應該使用apply()方法,它是異步的。請參閱文檔here