Каков жизненный цикл статической переменной, разделяемой между операциями? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть BaseActivity и несколько Деятельностей , расширяющих его.

BaseActivity имеет статическую переменную, которая делает его общим для потомка Деятельности (все они совместно используют один и тот же экземпляр).

Статическая переменная инициализируется ТОЛЬКО MainActivity (что расширяет BaseActivity ).

MainActivity явно регистрируется для BroadcastReceiver .

BroadcastReceiver изменяет значения в статической переменной.

Я хочу убедиться, что если система уничтожена MainActivity (например, для нехватки памяти), статическая переменная будет сброшена и установлена ​​в ноль.

Как я уже сказал, MainActivity делит статическую переменную с другими Деятельностями , и он владеет BroadcastReceiver , и он инициализирует статическую переменную.

Без BroadcastReceiver данные статической переменной будут ненадежными.

Теперь у вас есть весь сценарий. Давайте разберемся с вопросами:

Каков жизненный цикл разделяемой статической переменной в этом случае?

Уничтожает ли Android (в случае нехватки памяти) отдельные действия или уничтожает все мое приложение (все действия)?

  • Если оно полностью уничтожит мое приложение и сбросит статическую переменную, которая была бы приемлемой, я беспокоюсь, что она уничтожит только MainActivity и отменит регистрацию BroadcastReceiver , но при этом сохранит статическую переменную (Что станет ненадежным).

Если Android может уничтожить MainActivity в одиночку и сохранить статическую переменную, как я могу получить уведомление или узнать о том, что в следующий раз MainActivity запустится чтобы я мог перезагрузить значения внутри статической переменной?

К сожалению, я не могу положиться на onDestroy() в MainActivity , чтобы установить статическую переменную в ноль, поскольку вы знаете, что она не гарантированно будет вызываться в случае, если Android уничтожит активность в нехватке памяти.

1 Ответ

0 голосов
/ 06 ноября 2018

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

Статическая переменная будет сброшена на null ТОЛЬКО после того, как будут уничтожены все другие действия, которые расширяют BaseActivity (потому что она уже установлена! = null с помощью MainActivity и / или BroadcastReceiver). Поскольку все ваши действия расширяются BaseActivity, сброс переменной произойдет после завершения всего процесса.

Разрушает ли Android (в случае нехватки памяти) отдельные действия или разрушает все мое приложение (все действия)?

В этом случае Android уничтожает весь процесс приложения.

Если Android может уничтожить только MainActivity и сохранить статическую переменную, как я могу получить уведомление или узнать об этом при следующем запуске MainActivity, чтобы я мог перезагрузить значения внутри статической переменной?

Используйте SharedPreferences , если применимо.

...