Android: Когда приложение было убито, как установить точку входа для нового запуска? - PullRequest
0 голосов
/ 27 мая 2010

Я использую отдельный класс только со статическими полями для хранения текущих данных приложения. Он частично заполняется с sharedpreferences при запуске приложения. Остальные данные - это результаты некоторых действий, которые используются для дальнейшего просмотра этих результатов (несколько действий, использующих результаты).

Я могу перейти на домашний экран, запустить другие приложения и т. Д., И когда я вернусь в свое собственное приложение, оно будет работать правильно.

Однако, поскольку новая функция Error Reporting, я получаю несколько отчетов об ошибках, связанных с ошибкой nullreference. Объект null является ссылкой на статическое поле в упомянутом отдельном классе.

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

Я хотел бы знать: есть ли способ заставить приложение полностью «перезапустить» и не запускать последнее использовавшееся действие, если оно будет убито? Или это стандартное поведение? Могу ли я сделать это программно? Например, когда статические поля пусты, перезапустите приложение?

1 Ответ

2 голосов
/ 27 мая 2010

Возобновление действия, в котором пользователь находился, является нормальным поведением. Идея состоит в том, чтобы заставить пользователя выглядеть так, как будто приложение никогда не закрывалось. Вы можете посмотреть на две вещи:

protected void onSaveInstanceState(Bundle outState){
    // This gets called by the system when it's about to kill your app
    // Put all your data in the outState bundle
}

Этот пакет тот же, который передается в действие в onCreate(). Затем вы можете извлечь из него всю необходимую информацию и восстановить значения в статическом классе.

Другой способ - просто проверить значения в методе onResume() любой из ваших операций. Если значения в некотором роде равны нулю или неверны, вы можете вызвать start исходное действие и finish() запускаемое.

...