АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Хранение состояний

Читайте также:
  1. Microsoft нацеливает хранение Windows 8 на информационные центры предприятия.
  2. Во всех ли случаях необходимо выполнять проверку условий I группы предельных состояний?
  3. Вопрос 24. Локальные свойства непрерывных функций: локальная ограниченность, устойчивость знака и сохранение непрерывности при арифметических операциях.
  4. Глава 19. Эмоциональный стресс и регуляция эмоциональных состояний - 465
  5. Глава 29 Сплетни и хранение секретов
  6. Главное — это сохранение внутренней уверенности в себе.
  7. Графическая модель СМО в виде цепочки гибели-размножения. Разметка графа состояний СМО. Пример.
  8. Дифферениировка стресса и других состояний
  9. Занятие 4. Возможности КонсультантПлюс для решения различных практических ситуаций (продолжение). Сохранение результатов работы
  10. ИЗГОТОВЛЕНИЕ, УЧЕТ, ИСПОЛЬЗОВАНИЕ, ХРАНЕНИЕ И УНИЧТОЖЕНИЕ ПЕЧАТЕЙ, ШТАМПОВ
  11. Какой случай обязательной проверки I группы предельных состояний назван не верно?
  12. Невроз навязчивых состояний

Как было описано выше ОС Android позволяет приложениям хранить данные, соответствующие активити в специальном классе Bundle. Вызывается метод public void onSaveInstanceState(Bundle outState), когда устройство меняет состояние приложения с «выполняется» на «приостановлено» или «завершено». В его реализации разработчик должен сохранить данные, необходимые для дальнейшего восстановления состояния. Для этого Bundle обладает множеством методов, позволяющих отправить на хранение объект определенного типа: putBoolean(String key, boolean value), putByte(String key, byte value), putChar(String key, char value), putLong(String key, long value), putLongArray(String key, long[] value).Такая структура методов эффективна и проста для понимания: легко представляется в виде таблиц, в которой первый столбец является ключом, второй хранимым значением.

В нашем приложении приходится обращаться со сложными объектами, данные методы не подходили. Был использован метод putSerializable(String key, Serializable value), позволяющий отправить на хранение любой сериализуемый объект. Сериализация(обратная операция- десереализация) – процесс, переводящий объект в битовую последовательность, обратная- восстановление объекта из массива бит. Для того, чтобы объект некоторого класса можно было сериализовать, класс должен быть помечен специальным интерфейсом-маркером java.io.Serializable, дающим понять виртуальной машине, что объект данного класса может быть сериализован. Сущности задачи являются сериализуемыми. В приложении придется сохранять в Bundle коллекции сущностей или объектов карты, возникает неприятный момент: интерфейсы java.util.List, java.util.Map, java.util.Set не являются сериализуемыми. Классы, которые их реализуют и используются в задаче(java.util.ArrayList, java.util.HashSet, java.util.HashMap) являются сериализуемыми, поэтому пришлось при объявлении переменных указывать класс, а не интерфейс, либо проводить операцию приведения по типу при вызове метода.

Согласно спецификации, любой из методов отправления объекта в хранилище перетрет предыдущее значение, которое имеет этот же ключ, при опечатке в ключе ошибку до исполнения и получения некорректного значения отловить будет невозможно, поэтому к выбору ключей нужно подходить ответственно. Разумным способом хранения ключей будет их вынесение в константы в классе, в котором они будут использоваться, например так записан ключ в одном из фрагментов, работающих с картой: private static final String SELECTED_ROUTES_KEY = "selected_routes".

Важным является выбор тех объектов, которые нужно хранить. Не смотря на то, что основными объектами, с которыми работают формы являются сущности из локальной базы или некоторые транспортные объекты, не всегда оправдана лишняя конвертация из объектов модели в объекты, рисуемые на формах. Если везде заниматься хранением именно объектов модели, то возникнут проблемы с производительностью. В таком случае разница между созданием формы «с нуля» будет отличаться от восстановления отсутствием обращения к базе данных. Это даст существенную разницу в производительности, но остается возможность оптимизировать алгоритм работы с состояниями форм.

Показательным примером в этом плане служит работа с маршрутами. В сущности маршрута имеется список точек, в которых содержится информация не только о географическом положении, необходимом для отображения на карте, но и о временных, скоростных характеристиках. Для того чтобы нарисовать на карте линию (объект класса com.google.android.gms.maps.model.Polyline) необходимы точки карты (объекты класса com.google.android.gms.maps.model.LatLng). Их и можно хранить. Это исключает лишнюю конвертацию сущностей в объекты для работы с картой.

Важным параметром при восстановлении фрагментов, содержащих карту, является положение камеры. Как было описано выше, за положением камеры следит специальный слушатель, записывающий значения приближения, широты и долготы в SharedPreferences открытого активити.

При сохранении состояния спискового представления можно пойти двумя путями: 1) хранить объекты отображаемые в графическом элементе 2)хранить объекты модели, которые отображаются в списковом представлении. Первый способ кажется менее затратным, так и есть, но из-за специфики некоторых компонентов(таких, как планировщик маршрутов), объекты модели все равно необходимо хранить и передавать в контейнер, т.к. объекты списка не содержат многой информации и не предназначены для работы вне своей таблицы, на их основе нельзя будет сформировать данные по маршруту на карте. Поэтому был выбран второй вариант: хранятся объекты модели и идентификаторы выбранных элементов, на основе которых будет сформирован выбор элементов спискового представления после пересоздания.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)