Является ли статическая безопасность в Android? - PullRequest
7 голосов
/ 30 июля 2009

Я использую один статический класс в своем коде, который определяет статическое поле, которое я повторно использую между вызовами Activity onStop / onStart. Вот сценарий:

  1. Пользователь нажимает кнопку «Авторизовать» (статические данные инициализируются)
  2. Активность остановлена ​​и веб-браузер называется
  3. Браузер выполняет обратный вызов и активность восстанавливается (статические данные используются повторно)

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

Есть предложения?

Ответы [ 2 ]

10 голосов
/ 30 июля 2009

Это не безопасно. Ваш процесс может быть уничтожен между onStop и onStart, поэтому все статические данные исчезнут. Фактически, ваша активность может быть даже убита до того, как она попадет в OnStop. В ваших тестах процесс не был убит, но это было для пользователя. Посмотрите цикл Android Activity Life , в котором есть хорошая блок-схема, показывающая возможности.

Вам нужно хранить данные другим способом, например, в префах или базе данных.

0 голосов
/ 07 января 2013

Если эти статические данные относятся к активности, которую вы только что остановили - вы можете использовать обычные нестатические поля + метод onSaveInstanceState.

@Override
protected void onSaveInstanceState(Bundle outState) {
    // ... save your Serializable data here in outState bundle
    super.onSaveInstanceState(outState);
}

Случай будет:

  1. Вы закрываете свою деятельность и переходите в браузер (вызывается onStop)
  2. система убивает процесс вашего приложения (вызывается onSaveInstanceState куда вы сохраняете данные)
  3. Пользователь возвращается к вашей активности (onCreate вызывается с Параметр saveInstanceState)

В большинстве случаев 2-го пункта не будет. Система может, но не должна убивать процесс вашего приложения. Если это не так - вы не получите метод onCreate, но методы onStart и onResume, и ваши поля останутся неизменными.

...