Я создал простой код для тестирования функции SharedPreferences на Android. Сначала инициализируется экземпляр SharedPreferences, и из него извлекается значение логического var, используя «false» в качестве значения по умолчанию, а затем устанавливается «true». Когда вызывается onStop, значение сохраняется в SharedPreferences как 'true', когда вызывается onDestroy, пара ключ-значение удаляется. Но происходит следующее: значение «true» до того, как оно установлено в методе onCreate, в то время как оно должно быть «false», а затем «true».
public class MainActivity extends AppCompatActivity {
SharedPreferences preferences;
private String KEY = "PREF_KEY";
private String PREFS = "my_preferences";
private static final String TAG = "MainActivity";
boolean value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences(PREFS, MODE_PRIVATE);
value = preferences.getBoolean(KEY, false);
Log.d(TAG, "onCreate: BEFORE " + value);
value = true;
Log.d(TAG, "onCreate: AFTER " + value);
}
@Override
protected void onStop() {
super.onStop();
preferences.edit().putBoolean(KEY, value).apply();
}
@Override
protected void onDestroy() {
preferences.edit().clear().apply();
super.onDestroy();
}
}