2015-06-01 4 views
1

Насколько я знаю, getDefaultSharedPreferences загружает все файлы предпочтений в память. В моем приложении у меня есть много классов, где я передаю контекст и использую getDefaultSharedPreferences. Во время выполнения эти классы загружаются так много раз, то в результате getDefaultSharedPreferences называется выделенным. Мой вопрос: следует ли загружать настройки только один раз в классе Application, а затем получать доступ к настройкам оттуда во всех классах? Это выполнимо? Будет ли это увеличивать скорость моего приложения? Кто-нибудь это сделал?Должен ли я помещать getDefaultSharedPreferences в класс приложения

Что-то вроде этого:

private static MyApplication singleton; 

public static MyApplication getInstance() { 
    return singleton; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    myPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
} 

public SharedPreferences getPreferences(){ 
    return myPreferences; 
} 
+0

Ya вы можете это сделать. и по моему аспекту это увеличивает скорость и читаемость кода. –

+0

Это называется шаблоном SingleTon, и вы можете его инициализировать в любом месте, не обязательно в классе приложения. Мое предложение: создать класс Helper, инициализировать его в классе Application и использовать метод Helper.getPreference() для получения экземпляра. –

+0

@VishnuPrabhu Зачем вам нужно создавать однопользовательский класс Helper. Сам прикладной класс singleton использовал его. –

ответ

1

SharedPreferences кэши после первой загрузки, поэтому доступ к диску для загрузки данных потребуется время, но только для одного Time.once они находятся в памяти, после первой ссылки. При первом получении определенного SharedPreferences (например, PreferenceManager.getDefaultSharedPreferences()) данные загружаются с диска и сохраняются.

+0

Что делать, если вы закрываете активность. Будет ли храниться в памяти для других видов деятельности? – chris

+0

Если нет необходимости помещать его в класс приложения, то должен ли я обращаться к нему с помощью контекста приложения? – chris

+0

Это зависит от размера вашей памяти, если он достаточно велик для выполнения других операций, тогда он будет храниться в памяти, иначе он будет удален. Всегда лучше использовать getApplicationContext() – Kartheek

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