1. Что из себя представляет SQLite?
SQLite – реляционная СУБД написанная на языке C. Выступает в роли сервера, т.е. программы подключаются к файлу базы данных и взаимодействуют с ней.
На Android SQLite представляет из себя основной файл с расширением .db, а также вспомогательные файлы write ahead logs (WAL) и shared memory files (SHM), которые находится в корневой директории приложения (data/data/package.name/databases) просмотреть которую возможно, только при наличии root прав на телефоне:
По умолчанию, доступ к базе данных возможен только из приложения, которое ее создало. Чтобы получить к ней доступ из других приложений, нужно использовать возможности ContentProvider и ContentResolver.
2. Для чего нужна версия базы данных?
Версия необходима для изменения структуры базы данных (БД). Например при добавлении новой таблицы в БД, нужно повысить версию с 1 до 2 и создать файл миграции, который содержит SQL код, на основании которого Android добавит в БД новую таблицу и при этом сохранит все существующие данные в сохранности.
3. В каком потоке необходимо обрабатывать запросы в базу данных?
Любые запросы к базе данных необходимо обрабатывать в отдельном потоке, чтобы главный UI поток приложения был разгружен и не возникало неприятной ANR ошибки и кашей приложения.
Для запросов можно использовать любые удобные средства – AsyncTask, ThreadPool, RxJava, Kotlin Coroutines.
4. Что лучше использовать для хранения данных SQLite или SharedPreferences?
SharedPreferences (SP) предназначен только для хранения данных в формате ключ-значение и при возрастании объема хранимой информации, запросы к SP начнут тормозить. SP используется в основном для хранения какого-либо небольшого кэша, например время сессии, настройки, прогресс. Соответственно для полноценного хранения информации и осуществления к ним гибких запросов, необходимо использовать СУБД SQLite.
5. Какие популярные ORM для Android вы знаете?
Realm – самый распространенный NOSQL фреймворк написанный на C++, исходя из статистики и самый быстрый. Из SQL фреймворков можно использовать Room, ORMLite, GreenDao. Room предоставляется библиотекой androidx и на текущий момент является самым популярным решением. Статистика производительности, время чтения и записи указаны в миллисекундах:
Библиотека | Запись | Чтение |
Realm | 151 | 29 |
ORMLite | 151 | 666 |
Room | 131 | 699 |
GreenDao | 81 | 1238 |
Крайне не рекомендуется использовать чистый SQL Helper, который поставляется с Android SDK, т.к. на его реализацию уходит достаточно много времени, по сравнению с ORM.