Как вызвать метод непосредственно перед закрытием приложения?

#java #android #android-lifecycle

#java #Android #android-жизненный цикл

Вопрос:

У меня есть переменная, которая содержит данные, которые могут изменяться, когда пользователь использует приложение. Моя цель — сохранить эти данные в SharedPrefs непосредственно перед тем, как пользователь закроет приложение, я думал о чем-то вроде

 OnStop()  {
Preferences.edit()... }
  

но я не знаю правильного синтаксиса…
заранее спасибо, ребята

Комментарии:

1. onPause () и onStop() безопаснее

Ответ №1:

Сохраните ваши данные в SavedPrefs в методе onStop.

Syntex будет выглядеть

В методе onStop

 @Override
protected void onStop() {
    super.onStop();
    SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = saved_values.edit();
    edit.putString("key", "stringToBeSaved")

    editor.commit();
}
  

А затем повторно получить ваши данные в методе onCreate

 @Override
protected void onCreate(Bundle savedInstanceState) {
    SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    String foo = saved_values.getString("key", "default_string");
}
  

Помните, что ключ должен быть таким же.

Для получения дополнительной информации ознакомьтесь с документами Android о
общих настройках: Сохранение данных ключ-значение
Жизненный цикл Android: понимание жизненного цикла Activity

Ответ №2:

Activity.onStop() вызывается непосредственно перед полным закрытием приложения (удален из недавних) Вероятно, вам следует использовать Activity.onPause() для сохранения ваших настроек, поскольку он также будет вызван, когда пользователь просто переключится на другое приложение.

Дополнительная информация:https://developer.android.com/guide/components/activities/activity-lifecycle

Комментарии:

1. теперь это может быть правдой, если вы выполняете изменение действия, старое действие может быть остановлено в зависимости от того, с какими флагами вы запускаете новое действие. Активность — это не приложение. Если мы говорим о SingleActivityApplication, то ок, в противном случае, обратите внимание

2. я просто предположил, основываясь на контексте, что именно тогда он захочет сохранить в SharedPrefs

3. Конечно, комментарий был не для вас, а для автора. Просто чтобы посоветовать ему 🙂

Ответ №3:

Вы должны сохранять свои постоянные данные в onPause() , а не в onStop() .

Затем вы можете получить свои данные в onResume() .

Для сохранения данных вы можете взглянуть на этот пример

   SharedPreferences.Editor editor = getSharedPreferences("myPrefs", MODE_PRIVATE).edit();
  editor.putString("username", "My name");
  editor.apply();
  

А затем повторно введите ваши данные следующим образом

   SharedPreferences prefs = getSharedPreferences("myPrefs", MODE_PRIVATE); 
  String username = prefs.getString("username", "No username"); //No username is the default value