android - статическая переменная убита, но активность выведена на передний план
Скажем, у меня есть 2 действия A и B. Я иду в B из A, затем нажимаю кнопку Home. в A. инициализируются несколько статических переменных
через несколько часов или дней или до прекращения активности я снова запускаю приложение с помощью кнопки "Последние". действие B становится новой точкой входа в это приложение, но статические переменные больше не содержат никакого значения и не имеют возможности инициализироваться, пока я не перенаправлю обратно на A.
мой launchMode
для обоих видов деятельности singleTop
, не уверен, что это имеет значение, но я пытался singleTop
, singleInstance
а также standard
никто из них не работает. Я предполагаю, что моим ожидаемым поведением будет точка входа всегда A или любая другая активность, если она не уничтожается и, конечно, статические переменные по-прежнему сохраняют ценность.
Спасибо!
3 ответа
Проблема может быть в том, что когда ваше приложение работает в фоновом режиме, ОС Android должна была очистить память, чтобы освободить ресурсы для другого приложения
Если статические переменные не работают, вы можете попробовать использовать getter()
а также setter()
методы для переменных.
- Я надеюсь те
static
переменные имеют примитивные типы данных. - Даже если приложение работает в фоновом режиме, система Android через некоторое время убивает процесс.
- Таким образом, вы можете сделать, это передать эти примитивные переменные через
Intent
вActivityB
, - Теперь, если приложение убито из фона и перенесено в Foreground, то же самое намерение используется для запуска
ActivityB
и вы все еще можете получить переданные переменные.
Передать переменную в ActivityB
вместо статической переменной.
Intent intent = new Intent();
intent.putExtras("Id", 1);
intent.putExtras("Name", "kevz");
startActivity(intent, ActivityB.class);
Сейчас в ActivityB
получить переданные значения переменных-
int Id = getIntent().getIntExtra("Id", -1); // -1 is default value.
String Name = getIntent().getStringExtra("Name", "unknown"); // unknown is default value