Переменные, собираемые мусором - PullRequest
4 голосов
/ 14 мая 2011

У меня запущено приложение для Android. Через некоторое время, когда пользователь выходит из приложения, выполняя что-то еще и возвращаясь к моему приложению, статические переменные в приложении, похоже, собираются мусором.

В скорлупе орехов я сохраняю введенное имя пользователя / пароль при запуске приложения, сохраняю их в статической переменной и использую их для связи с сервером. Мне нужно либо выяснить, когда они собираются при повторном запуске приложения (чтобы я перенаправил их в представление входа в систему), либо предотвратить сбор мусора для этого класса. Идеи?

Ответы [ 2 ]

5 голосов
/ 14 мая 2011

Один из способов реализовать второй сценарий - реализовать собственный класс, который наследует Application, и указать его в своем манифесте.Вы можете поместить свои статические переменные в этот класс.Android создаст один экземпляр этого класса, когда запустит ваш процесс, и этот экземпляр будет живым, пока процесс тоже жив.

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

Кроме того, вы можете использоватьодин из стандартных компонентов персистентности Android (файл общих настроек, SQLLite, AccountManager, OBB, хранилище учетных данных и т. д.) для сохранения учетных данных при перезапуске процесса.Однако обратите внимание, что при этом возникает целый ряд новых проблем, связанных с тем, как правильно защитить эту сохраненную копию учетных данных пользователя, чтобы защитить ее от несанкционированного доступа другими приложениями (особенно на корневых телефонах).

2 голосов
/ 14 мая 2011

Я предлагаю не пытаться "предотвратить сбор мусора в этом классе". Вместо этого работайте в рамках, как это было задумано.

(Не затрагивая тему аутентификации пользователей или управления учетными данными ...)

Android предоставляет несколько вариантов хранения данных, обозначенных как http://developer.android.com/guide/topics/data/data-storage.html. В вашей ситуации использование предпочтений может быть неплохим, легким и простым в реализации вариантом.

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

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