|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Объявляю статическую переменную в классе Application, чтобы потом обращаться к ней с любой активити. Код: java 1. 2. 3.
Потом в какой-то момент выставляю значение MyVariant = false и больше не перезаписываю ее. Но заметил, что на многих устройствах в процессе работы приложения переменная регулярно сбрасывается в true. Значит ли это, что класс Application может пересоздаваться в процессе работы приложения? Сам проверить не могу, у меня данная переменная не сбрасывается в true. Может ли это быть связано с многопоточностью или версией андроида? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 18:47 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Slon747 Значит ли это, что класс Application может пересоздаваться в процессе работы приложения? Slon747 Может ли это быть связано с многопоточностью может Slon747 версией андроида? нет ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 22:11 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Скажите, как можно предотвратить перезапись переменной на значение по-умолчанию? Т.е. чтобы не пересоздавалась переменная? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 11:31 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Slon747 Скажите, как можно предотвратить перезапись переменной на значение по-умолчанию? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 13:33 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
chpasha Slon747 Скажите, как можно предотвратить перезапись переменной на значение по-умолчанию? При запуске программа проверяет корректность лицензии. Если лицензия корректна, переменная "DemoVersion" получает значение false. И далее во всех активити данная переменная проверяется. Я специально разместил ее в Application, чтобы не зависеть от жизни активити. Т.е. не факт, что первая активити будет существовать. Т.е. боюсь получить "NullPointerException" при обращении к переменной через активити "MainActivity.DemoVersion". SharedPreferences не хочется использовать. Нужно проверять лицензию при каждом запуске. Пока что приходит в голову переделать тип в перечисление. И если значение null, то заново проверять лицензию и устанавливать значение переменной. Но может есть более правильный способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 19:34 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
И еще. Если в Application в onCreate() я создаю экземпляр класса: new Settings(); то значит после возврата приложения из фона создастся новый экземпляр Settings() ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 20:15 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Slon747 то значит после возврата приложения из фона когда приложение находится в фоне, оно может быть уничтожено (но не обязательно) и создано заново, если пользователь переключится на него снова. Зависит это в основном от кол-ва свободной памяти в системе - чем ее меньше, тем больше шансов, что система начнет убивать приложения в фоне. Если свернешь и сразу восстановишь - ничего скорее всего не случится. Естественно в случае убийства и перезапуска onCreate и все остальное выполнится снова. Об этом нужно помнить и сохранять данные, которые должны пережить "смерть в фоне". Например, если пользователь ввел какой-то текст, но нигде его не сохранил. Тоже касается и служебной информации вроде твоей статической переменной - ее значение станет по-умолчанию, т.е. как при первом старте. Эту ситуацию можно воспроизвести искусственно - свернуть приложение в фон, убить его (в окне logcat в Android Studio / Idea в самом низу слева есть красная кнопка "стоп" Terminate application), после этого запустить приложение через список последних запущенных приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 22:16 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
chpasha Slon747 то значит после возврата приложения из фона когда приложение находится в фоне, оно может быть уничтожено (но не обязательно) и создано заново, если пользователь переключится на него снова. Зависит это в основном от кол-ва свободной памяти в системе - чем ее меньше, тем больше шансов, что система начнет убивать приложения в фоне. Если свернешь и сразу восстановишь - ничего скорее всего не случится. Естественно в случае убийства и перезапуска onCreate и все остальное выполнится снова. Об этом нужно помнить и сохранять данные, которые должны пережить "смерть в фоне". Например, если пользователь ввел какой-то текст, но нигде его не сохранил. Тоже касается и служебной информации вроде твоей статической переменной - ее значение станет по-умолчанию, т.е. как при первом старте. Эту ситуацию можно воспроизвести искусственно - свернуть приложение в фон, убить его (в окне logcat в Android Studio / Idea в самом низу слева есть красная кнопка "стоп" Terminate application), после этого запустить приложение через список последних запущенных приложений. Это я понимаю. Но проблема возникает из-за того, что, приложение не полностью выгружается из памяти, а переменная тем не менее получает начальное значение, как при объявлении. Если бы полностью выгружалось, то и проблемы с данной переменной не возникло, т.к. ей присваивалось бы значение согласно проверки лицензии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 10:33 |
|
Статическая переменная в классе Application
|
|||
---|---|---|---|
#18+
Slon747 переменная тем не менее получает начальное значение Значит ошибка в работе логики приложения и/или в твоем понимании того, как оно работает. Но для начала убей приложение в фоне, как я описал выше, и протестируй его поведение ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 13:53 |
|
|
start [/forum/topic.php?fid=13&msg=40063251&tid=1330689]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 407ms |
0 / 0 |