Вопрос по android, static – Является ли статическая безопасность в Android?

7

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

User clicks on "Authorize" button (static data is initialized) Activity is stopped and web browser is called Browser executes callback and Activity is restored (static data is reused)

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

Какие-либо предложения?

Ваш Ответ

2   ответа
0

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

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

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

you close your activity and go to browser (onStop is invoked) system kills your application process (onSaveInstanceState is invoked where you save data) User navigates back to your activity (onCreate is invoked with savedInstanceState parameter)

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

10

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

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

Спасибо, Хейкки. Я думаю, что я знаю, что делать в этот момент Bostone
Это должно быть безопасно, но я не вижу смысла в создании статической переменной в объекте, который живет до тех пор, пока процесс жив. Обычного var должно быть достаточно как в контексте приложения, так и в самом объекте приложения.
Хейкки, что ты думаешь о размещении статической переменной в контексте приложения? Так ли это безопасно?

Похожие вопросы