2013-08-22 4 views
0

У меня есть активность с некоторыми фрагментами, и мне нужно сохранить некоторое количество данных, но недостаточно справедливо для SQL. Теперь, какова наилучшая практика использования SharedPreferences? Я хочу избежать звонков в файл и совершать его как можно больше. Потому что я предполагаю, что синтаксический анализ этого файла и особенно коммиты плохо для производительности.Передовая практика обработки SharedPreferences

Я знаю это question, в котором говорится, что вызов файла SharedPreferences всегда возвращает тот же объект. Но как насчет совершения?

Должен ли я использовать f.e. Bundle, чтобы сохранить мои данные и сохранить их сразу, когда активность идет в фоновом режиме? Или я должен постоянно сохранять часть моих данных, как в каждом фрагменте? Или я просто охочусь на призраков?

+0

общей прив существуют для хранения .... прив поэтому он не будет массовой информации. Просто пользователь pref (размер полиции, ясность, кеш, логин, пароль, цвет ui ...) –

ответ

2

Я думаю, что это ненужная и преждевременная оптимизация, которая не будет реалистично влиять на производительность. Сколько данных вы храните в SharedPreferences? Я думаю, вы просто охотитесь на привидений.

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

Редактировать: Для некоторой дополнительной оценки SharedPreferences в основном сохраняет вещи в карте Key/Value. Это делает его очень удобным для хранения и прочтения простых вещей, таких как пользовательские настройки (отсюда и название). Если вам нужно сделать что-то более сложное, вы можете быстро увидеть, насколько громоздким станет использование карты Key/Value, поэтому было бы целесообразно перейти к хранилищу базы данных, например SQLite. С помощью базы данных вы получаете очевидную выгоду от использования запросов. В основном, точка SharedPreferences добавлена ​​удобством для разработчиков, так что вам не нужно создавать полную базу данных для хранения простых значений. Смотрите здесь больше:

Pros and Cons of SQLite and Shared Preferences

+0

Я просто использую SharedPreferences, как они упоминаются. Для передачи значений я знаю лучшие подходы. Но карта может расти как любая другая коллекция. Дело в том, что это было простое исполнение и правильное использование. –

+0

@SteveBenett Вы видели мое редактирование? Дайте мне знать, если это не выяснит. –

2

Не уверен, что такое «справедливое количество данных» на самом деле, но используйте SQL - вот почему он здесь. Я действительно так не оправдываюсь, чтобы этого не делать, зная, насколько это действительно легко. Если вы никогда не пробовали sqlite на android (который мог бы объяснить, почему вы хотите попытаться избежать этого), то пройдите через элементарный учебник, и вы действительно сделали.

+0

Я знаю SQL, это не проблема. Я просто хочу узнать о производительности и правильном использовании SharedPreferences. –

+0

SharedPreferences хранятся только в XML-файле. –

0

Вы можете использовать общественный класс, и мы должны назвать это метод, когда мы требовали.

пример:

SessionManager mSessionManager = new SessionManager(this); 
mSessionManager.putStringData("key", "value"); 

Класс приведен ниже:

import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 


public class SessionManager { 
// Shared Preferences 
SharedPreferences pref; 

// Editor for Shared preferences 
Editor editor; 

// Context 
Context _context; 

// Shared pref mode 
int MODE_MULTI_PROCESS = 0; 

// Sharedpref file name 
private static final String PREF_NAME = "SharedPref_Name"; 

private SharedPreferences getPref() { 
    return _context.getSharedPreferences(PREF_NAME, Context.MODE_MULTI_PROCESS); 
} 

// Constructor 
public SessionManager(Context context) { 
    this._context = context; 
    pref = _context.getSharedPreferences(PREF_NAME, MODE_MULTI_PROCESS); 
    editor = pref.edit(); 
} 


/** 
* Set the String data in the preferences. 
*/ 
public void putStringData(String keyname, String value) { 
    editor.putString(keyname, value); 
    editor.commit(); 
} 

/** 
* @return the string data from the prefs 
*/ 
public String getStringData(String keyName) { 
    return pref.getString(keyName, ""); 
} 

/** 
* Set the int data in the preferences. 
*/ 
public void putIntData(String keyname, int value) { 
    editor.putInt(keyname, value); 
    editor.commit(); 
} 

/** 
* @return the boolean data from the prefs 
*/ 
public int getIntData(String keyName) { 
    return pref.getInt(keyName, 0); 
} 

/** 
* Set the boolean data in the preferences. 
*/ 
public void putBooleanData(String keyname, boolean value) { 
    editor.putBoolean(keyname, value); 
    editor.commit(); 
} 

/** 
* @return the boolean data from the prefs 
*/ 
public boolean getBooleanData(String keyName) { 
    return pref.getBoolean(keyName, false); 
} 

/** 
* Set the long data in the preferences. 
*/ 
public void putLongData(String keyname, long value) { 
    editor.putLong(keyname, value); 
    editor.commit(); 
} 

/** 
* @return the long data from the prefs 
*/ 
public long getLongData(String keyName) { 
    return pref.getLong(keyName, 99); 
} 

/** 
* remove data from pref 
* 
* @param keyName 
*/ 
public void removeData(String keyName) { 
    editor.remove(keyName); 
    editor.commit(); 
} 

} 
Смежные вопросы