1. Описание предметной области, объектов и понятий, с которыми работает приложение.
2. Выделение сущностей и связей между сущностями, представление в терминах ORM.
3. Описание конфигурации ORM и ObjectCache.
4. Работа с БД
- применение паттерна Команда и Компоновщик для выполнения операций на БД;
- конфигурация исполнителя команд;
- команда как транзакция в БД;
- инструменты, доступные ORMLite для реализации транзакций.
5. Проблема доступа из UI потока к данным, изменяемым в других потоках.
6. Memoization подход для решения проблемы доступа из разных потоков.
7. Описание архитектуры кэшей с применением memoization.
8. Задача поддержания когерентности кэшей;
- использование HaMeR framework для актуализации UI кэша;
- использование механизма блокировок и батч-операций над данными в кэшах.
9. Ограничения ORM ObjectCache при работе с объектами DAO.
10. Реализация DAO с расширенными возможностями работы с ObjectCache.
20. Следствия
● Действие пользователя может порождать множество операций над
данными
● Операции над данными могут зависеть друг от друга
● Операции могут занимать значительное время
33. ● обработка отмены задач
● orientation changes
● CursorAdapter
Что может пойти не так
34. ● обработка отмены задач
● orientation changes
● CursorAdapter
● нотификация об изменениях
Что может пойти не так
35. java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a
notification. Make sure the content of your adapter is not modified from a background thread, but only from
the UI thread.
60. ● построение поисковых индексов в фоне
● индекс строится при изменении данных в объектном кэше
● передача построенного индекса в UI поток
● быстрый поиск в UI
Поиск
61. До:
● результаты > 1 сек
● progress bar на экране
После:
● результаты ~20 мс
● дополняются серверными результами
Поиск