Android-приложение убивает, когда оно долгое время находится в фоновом режиме

Мое приложение для Android убивает ОС Android, когда оно какое-то время находится в фоновом режиме. Поэтому, когда оно запускается, это пустой экран, поскольку все данные были стерты в то время, когда ОС убила процесс. К сожалению, я не храню любые данные в SQLite или sharedpreference. Каков наилучший способ показать компонент пользовательского интерфейса с данными даже после того, как приложение было убито? (К сожалению, не удалось реализовать SQLite из-за конфиденциальных данных/согласно требованиям).

1, я заметил, что всякий раз, когда это происходит в методе oncreate базовой активности, я получаю saveInstanceState в методе oncreate. Поэтому я просто вызываю метод запуска оттуда, и приложение работает, как и ожидалось. Но является ли это идеальным способом реализации?


person Manu Ram V    schedule 21.12.2018    source источник
comment
Прочтите о классе ViewModel для хранения данных для жизненного цикла активности.   -  person Anmol    schedule 21.12.2018


Ответы (2)


Если я правильно понял, вы должны быть совершенно правы с savedInstanceState, относительно сохранения простого состояния и восстановления из него.

static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
// ...


@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

Затем, когда приложение убито и перезапущено:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first

    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    // ...
}

Просто обратитесь к здесь для более подробной информации.

person Wei WANG    schedule 21.12.2018

скорее всего, сеанс на стороне сервера тем временем истек.

  • выйдите из системы на onPause() и войдите снова на onResume().
  • или используйте service, чтобы поддерживать сеанс на стороне сервера.
person Martin Zeitler    schedule 21.12.2018
comment
Нет. Токен доступа действителен даже после закрытия приложения. Серверная сторона не играет в этом никакой роли. - person Manu Ram V; 21.12.2018
comment
эта проблема все еще не воспроизводима... особенно, когда даже долгое время не имеет значения. попробуйте проверить if(savedInstanceState == null) {} и только тогда манипулируйте представлением. - person Martin Zeitler; 21.12.2018
comment
Это воспроизводимо, как я уже говорил ранее, ОС Android убивает процесс, причем очень случайным образом. Если приложение не убито, пользователь может без проблем представить пользовательский интерфейс с данными. - person Manu Ram V; 21.12.2018