Я создаю приложение для поиска событий, мы устанавливаем критерии поиска из одного экрана, заполняя другой экран, затем пользователь может редактировать критерии поиска с третьего экрана и переходит к четвертому экрану.
Для выполнения вышеупомянутой задачи я использую статический объект, который запоминает значения в приложении, и мне не нужно ничего делать дополнительно.
Но я боюсь, если о жизненном цикле статических объектов в Android, если обнаружена низкая память, Android удаляет статические объекты ???
Поскольку Android поддерживает многозадачность, если пользователь переключается на другое приложение, и когда пользователь возвращается, приложение начинает вести себя сумасшедшим, удаляется ли статический объект, когда он многозадачный ??? любая идея ?? а также предложить удерживать статический объект с помощью метода singleton лучше ???
Что ж, шаблон Singleton также основан на использовании статических переменных, поэтому на самом деле вы будете в том же положении. Хотя статический подход может работать в большинстве случаев, может случиться так, что в некоторых случаях, когда память заполнена и другое действие переходит на передний план, прежде чем ваше приложение перейдет к следующему экрану, процесс вашего действия может быть остановлен, и вы потеряете статические значения. Однако Android предлагает несколько вариантов сохранения значений между состояниями или их передачи, например:
Вы можете получить несколько примеров кода использования предпочтений, намерений и базы данных sqlite, просмотрев дерево исходного кода aegis-shield в коде Google или в других приложениях Android с открытым исходным кодом.
источник
После некоторого исследования выясняется, что использование приложения для хранения синглтонов - не такая уж и хорошая идея, если только вы не готовы воссоздать ее:
Не хранить данные в объекте приложения
поэтому, хотя принятый ответ является технически правильным, он не предоставляет всей информации.
Как видно из приведенной выше ссылки, если вы действительно хотите придерживаться этой модели, вам нужно быть готовым проверить наличие null и воссоздать данные, если это возможно.
источник
@ r1k0 прямо здесь. Хранение данных в статических полях класса не будет сохраняться само по себе при остановках и перезапусках процессов приложения. Android обычно убивает процессы (запущенные приложения), когда ему требуется память.
Согласно документу Android: состояние активности и извлечение из памяти ,
Вы можете сохранять и восстанавливать состояние примитивов, а также объектов Serializable и Parcelable, используя следующие методы. Они автоматически вызываются во время нормального жизненного цикла активности.
Итак, если у вас есть класс, который имеет только статические переменные, вы можете сохранить состояние каждого поля в onSaveInstanceState () и восстановить их в onRestoreInstanceState (). Когда Android завершает процесс, в котором работает ваше приложение, состояние ваших переменных будет сохранено, а когда Android восстановит ваше приложение, значения будут восстановлены в памяти в том же состоянии, что и раньше.
источник