Я хочу знать, что такое SharedPreferencesCompat? и как он отличается от SharedPreferences?
Что такое SharedPreferencesCompat? vs SharedPreferences
Ответ 1
Все классы ...Compat
предназначены для обратной совместимости. Некоторые из них привносят новые функции в старые устройства, которые не имеют их изначально, некоторые помогают другим способам разработки для старых устройств.
В этом случае он обеспечивает упрощенный способ вызова метода apply
, который был добавлен в уровне API 9.
Вам не нужен этот класс, если ваше приложение не поддерживает версии старше 9.
Если вы поддерживаете старые устройства и выполняете следующие действия
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key","val");
editor.apply();
вы получите ошибку, потому что этот метод не существует на всех поддерживаемых вами устройствах. Работа вокруг этого становится уродливой. Если вы не используете SharedPreferencesCompat
:
...
editor.putString("key", "val");
SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
Ответ 2
Исходный код ответит на ваш вопрос: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2_r1/com/android/common/SharedPreferencesCompat.java
Утилиты отражения для вызова SharedPreferences $Editor.apply, когда это возможно, возврат к фиксации при подаче заявки недоступен.