2016-11-06 4 views
1

Это хорошая идея, чтобы сохранить список String со слишком большим количеством предметов в Sharedpreferences? Усиливает ли производительность приложения?магазин arraylist sharedpreferences андроид

Я делаю это, чтобы хранить:

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

Нет, не очень хорошая идея, чтобы хранить огромный список String как контакты в SharedPreference.

В вашем приложении не существует определенного предела размера для сохраненного SharedPreference в качестве хранимого в /data/data/[package name]/shared_prefs/[app name].xml. Поскольку SharedPreferences хранятся в XML-файле, ему не хватает сильной поддержки транзакций SQLite. Поэтому я бы рекомендовал хранить такие данные в базе данных SQLite.

Другая вещь, которая должна иметь в виду, что нижний предел размера, о котором я знаю, будет вашим количеством свободного пространства кучи, поскольку SharedPreferences читает содержимое всего XML-файла в памяти.

Ответ в основном копируется из here.