Статические переменные в Android и нехватка памяти - несколько вопросов - PullRequest
3 голосов
/ 14 октября 2011

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

Итак, когда моя статическая переменная может просто исчезнуть?

  • Наскольконасколько я понимаю, статическая память может быть восстановлена, если ОС сообщает о нехватке памяти - может ли это произойти, пока приложение находится на переднем плане?Или только фон?
  • Есть ли какие-либо возможные способы восстановления статической памяти без состояния памяти?Я думаю, что иногда переменная исчезает без приложения, даже переходящего в фоновый режим, и я не уверен, что происходят какие-либо события с нехваткой памяти (AFAIK означает, что нехватка памяти относится ко всей ОС, а не к памяти приложения)
  • Что хорошоспособ моделирования статических переменных, возвращаемых операционной системой, чтобы увидеть, как приложение ведет себя, и впоследствии исправить ошибки?.

Ответы [ 2 ]

1 голос
/ 04 июля 2013

Это вопрос супер, супер старый, но я писал пост в блоге и упоминал, что видел это.Я понятия не имею, если вы все еще работаете над этим приложением (сомнительно), или если вы все еще видите эту проблему (также сомнительно).Я предполагаю, что вы установили эти статические значения в Activity, с которой запускается ваше приложение.Конечно, если ваше приложение будет закрыто, а затем перезапущено, вы не будете выполнять эту операцию.

Ленивая загрузка статики или инициализация их в пользовательском объекте приложения обычно заботится об этом.

Я довольно много исследовал идею «статики удалены из памяти», и основной ответ - это не так.Когда-либо.

0 голосов
/ 14 октября 2011

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

Самый простой способ - использовать общие настройки. Посмотрите на Android Data Storage , чтобы прочитать лучший (практический) способ хранения ваших данных в Android.

Исходя из ваших потребностей, я приглашаю вас продолжить с SharedPreferences . Больше никаких проблем, и вам даже не нужно моделировать переменные, возвращаемые ОС.

...