2016-11-06 71 views
1

Sharedpreferences中存儲String列表中包含太多項目的列表是不是一個好主意?它會傷害應用性能嗎?store arraylist sharedpreferences android

我這樣做是爲了保存:

public boolean saveArray(List<String> contacts) { 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(_context); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putInt("Status_size", contacts.size()); 
    for (int i = 0; i < contacts.size(); i++) { 
     editor.remove("Status_" + i); 
     editor.putString("Status_" + i, contacts.get(i)); 
    } 
    return editor.commit(); 
} 

,並閱讀:

public void loadArray(Context context) { 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
    _validContactsPhones.clear(); 
    int size = sharedPreferences.getInt("Status_size", 0); 
    for (int i = 0; i < size; i++) { 
     _validContactsPhones.add(sharedPreferences.getString("Status_" + i, null)); 
    } 
} 
+1

唯一的性能可能來自'editor.commit();'。改爲調用'editor.apply()'。 – peter

回答

0

不,它不是一個好主意,存儲StringSharedPreference接觸一個巨大的名單。

存儲在/data/data/[package name]/shared_prefs/[app name].xml中的應用程序中存儲的SharedPreference沒有特定的大小限制。由於SharedPreferences存儲在XML文件中,因此缺乏SQLite強大的事務支持。因此,我建議將這種數據存儲在SQLite數據庫中。

需要記住的另一件事是,我知道的最小大小限制將是您的可用堆空間量,因爲SharedPreferences會將整個XML文件的內容讀取到內存中。

答案主要是從here複製而來。