Это эффективный способ получить / установить несколько SharedPreferences в одноэлементный помощник? - PullRequest
0 голосов
/ 02 марта 2019

Мое приложение Android хранит 15-20 пар настроек с SharedPreferences, и я использую вспомогательный класс, поэтому мне не нужно создавать новый метод в каждом классе, который должен их извлекать.

Некоторые извлечения начинают занимать> 100 мс, и я не уверен, что мой текущий метод эффективен для производительности, так как он проходит в контексте и каждый раз создает новый объект SharedPreferences.Это случается много раз во время выполнения AsyncTasks приложения.

Вот что я делал:

public class SharedPrefHelper {

static void setDefaults(String key, String value, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(key, value);
    editor.apply();
}

static void setDefaultsInt(String key, int value, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putInt(key, value);
    editor.apply();
    }

    //... continued with other variable types and getDefault variants
    //....... 
} 

Будет ли ниже более эффективный способ справиться с этим?

public class SharedPrefHelper {

private static SharedPreferences preferences;

static void init(@NonNull final App app) {
    preferences = PreferenceManager.getDefaultSharedPreferences(app);
}
//App is the Application class, init is called in onCreate()

static void setDefaults(String key, String value) {
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(key, value);
    editor.apply();
    }
    //... continued with other variable types and getDefault variants
    //....... 
} 

Или есть другие переменные ключевые слова, которые будут лучше (окончательные и т. Д.)?

1 Ответ

0 голосов
/ 02 марта 2019

+100ms - это долгое время для такого простого действия и столь малой пары ключ-значение.
Я думаю, что проблема не в этом.

Однако, чтобы ответить на ваш вопрос, да,Предлагаемая альтернатива, безусловно, лучше оригинальной.Действительно, нет смысла вызывать getDefaultSharedPreferences(context) несколько раз, так как этот метод указывает на файл по умолчанию, который устанавливается для всего приложения.

Так что просто сохраните его как поле instance / static (но избегайте static насколько это возможно).


preferences.edit()

возвращает новый, свежий, Editor (EditorImpl, он поддерживает Map измененных пар ключ-значение и затем сохраняет всена apply) каждый звонок, так что с тобой все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...