Могли ли значения глобальных переменных быть сброшены при возобновлении работы приложения для Android? - PullRequest
0 голосов
/ 28 января 2012

Когда приложение было переведено в фоновый режим и позже возобновило действие, возможно ли, что статические переменные класса, установленные в другом действии, могли быть сброшены сборщиком мусора и имело значение, равное нулю?

Я использую пару общедоступных статических переменных int в своей основной деятельности и использую их как глобальные переменные в различных других действиях. Я получил отчет о сбое в консоли разработчика из Android Market, где единственное объяснение, которое я могу найти, заключается в том, что приложение возобновляет действие, которое использует значение публичной статической переменной int в другом классе, но значение имеет (загадочно?) стать нулем. Я знаю, что это было установлено на что-то еще, когда приложение впервые запустилось. Это вообще возможно?

Если мои подозрения верны, каков рекомендуемый способ сохранения значений глобальных переменных, когда приложение переводится в фоновый режим? Сохранить их в SharedPreferences в OnPause () или использовать onSaveInstanceState или что-то еще?

Ответы [ 3 ]

4 голосов
/ 28 января 2012

Когда приложение было переведено в фоновый режим и позднее возобновило действие, возможно ли, что статические переменные класса, установленные в другом действии, могли быть сброшены сборщиком мусора и имело значение, равное нулю?

Это не будет "сброшено сборщиком мусора".Однако Android-процесс мог прервать процесс, чтобы освободить память для других приложений.

Каков рекомендуемый способ сохранения значений глобальных переменных, когда приложение переводится в фоновый режим?

Статические элементы данных должны быть только кешем.Данные, которые вы хотите сохранить независимо от того, что происходит (например, процесс завершается), должны быть сохранены в каком-либо постоянном хранилище, например, в плоском файле, SharedPreferences или в базе данных.onPause() - это вероятное время для сохранения этих данных, поскольку в любое время после этого ваш процесс может быть прекращен без уведомления.

1 голос
/ 28 января 2012

Будьте осторожны со статическими переменными. Перейдите по ссылке для объяснения относительно Singleton (который также использует статическую переменную для поддержания состояния): https://stackoverflow.com/a/9004638/1127492

0 голосов
/ 28 января 2012

Вы можете сохранить эти значения на SQLite для метода onDestroy в действии или другого метода с ответом на выход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...