Какой метод хранения данных Android использовать?

Документация Android имеет следующие параметры ниже, но не объясняет, какие обстоятельства лучше всего подходят для каждого. Каковы плюсы и минусы каждого метода? Например, при каких условиях SQL будет лучше, чем Shared Preferences?

  • Общие настройки
  • Внутренняя память
  • Внешнее хранилище
  • Базы данных SQLite
  • Подключение к сети

4 ответа

Решение

Различные варианты хранения в Android

введите описание изображения здесь


Поставщики контента

введите описание изображения здесь

  • Учтите, что структурированные данные, добавленные на устройство из приложения1, недоступны для другого приложения2, присутствующего в том же устройстве, но фотография профиля, добавленная на устройство application1 доступен для application2 работает в одном устройстве

  • Рассмотрим устройство Android как город, приложения в нем - это дома в городе, люди в домах (приложения) - это данные. Теперь контент-провайдер похож на брокера в городе (андроид-устройство). Этот брокер предоставляет доступ жителям города для поиска разных домов, ссылаясь на то, что провайдер контента на устройстве Android обеспечивает доступ к данным на устройстве для различных приложений.


Общие настройки

введите описание изображения здесь

  • Предположим, у меня есть приложение, скажем, приложение Face book, которое я использую для входа в свою учетную запись.

  • Теперь я в первый раз ввожу свое имя пользователя и пароль, чтобы получить доступ к своей учетной записи. Скажем, я выхожу из приложения через час и снова использую то же приложение Face book, чтобы снова войти в свое приложение.

  • Мне нужно снова ввести имя пользователя и пароль, чтобы войти в свою учетную запись, и я задаю тему для своего приложения и другие настройки того, как мое приложение выглядит в моем текущем телефоне.

  • Это не нужно, потому что учтите, что я использую свой телефон для входа в приложение. Поэтому я всегда буду использовать свой телефон для входа в систему снова и снова, поэтому вводить свои учетные данные снова и снова - это больше работы, показывает, что это не удобное приложение

  • Совместно используемые настройки очень удобны в таких ситуациях, когда я могу использовать их функцию для обмена моими данными в XML-файле, который физически существует в приложении Android, установленном на моем телефоне, который не уничтожается, даже если приложение закрыто. Здесь мы можем сохранить данные пользовательских настроек текущего приложения.

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


Файловое хранилище

введите описание изображения здесь

  • В Android мы можем использовать пространство для хранения данных устройства для приложений. Тип данных включает в себя такие вещи, как текстовый файл, файл изображения, видео файл, аудио файл и т. Д.

  • Как видно из рисунка, мы можем сделать это в двух местах. Одним из способов является запись необработанных файлов в первичное / вторичное хранилище. Другой способ - записать файлы кэша в первичное / вторичное хранилище.

  • Существует также различие между хранением необработанных данных и данных кэша, необработанные данные, однажды сохраненные в памяти пользователем, должны быть явно удалены пользователем явно, в противном случае они будут существовать до тех пор. Данные кэша, хранящиеся в памяти, не являются постоянными данными, потому что система автоматически удаляет их, если чувствует, что памяти недостаточно.

введите описание изображения здесь

Внутренняя память:

  • Предположим, что пользователь в приложении хранит данные во внутреннем хранилище, тогда только этот пользователь этого приложения имеет доступ к этим данным на мобильном телефоне, и эти данные автоматически удаляются, когда пользователь удаляет приложение. Говоря о том, какая внутренняя память является частной.

  • Каталог внутреннего хранилища приложений хранится с использованием имени пакета имени в специальном месте в файловой системе Android.

  • Другие приложения или пользователи текущего приложения не имеют доступа к файлу, установленному конкретным пользователем и конкретным приложением, если только оно явно не предоставлено пользователю для доступа для чтения / записи.

введите описание изображения здесь


SQLite

введите описание изображения здесь

  • Sqlite используется для локального хранения более структурированных данных на мобильном телефоне, на котором запущено приложение для Android. Структурированные данные включают, как показано на рисунке, информацию ученика в виде строк и столбцов.

  • Sqlite предлагает аналогичные функциональные возможности, такие как Mysql и oracle, но с ограниченными функциональными возможностями. Некоторые из них включают выполнение операций с запросами над таблицами. Хотя есть такие функции, как создание представлений, но некоторые функции недоступны, например, хранимая процедура.

  • Sqlite очень полезен для хранения сложных и больших данных, которые могут быть загружены один раз и могут использоваться снова и снова, пока приложение не будет запущено. Когда приложение закрывается, база данных sqlite также уничтожается.


Собираем все кусочки вместе

введите описание изображения здесь

  • Общие предпочтения хороши для хранения... предпочтений приложения и других небольших фрагментов данных. Это просто очень простое хранилище ключей для нескольких типов данных: boolean, float, int, long и string. Так, например, если у моего приложения был логин, я мог бы рассмотреть сохранение ключа сеанса в виде строки в SharedPreferences.
  • Внутреннее хранилище хорошо подходит для хранения данных приложения, к которым пользователю не требуется доступ, поскольку пользователь не может легко получить доступ к внутреннему хранилищу. Возможно, это хорошо для кеширования, логов и прочего. Все, что только приложение намеревается создать, прочитать обновление или удалить.
  • Внешнее хранилище. Отлично подходит для того, что я только что сказал. Приложение Dropbox, вероятно, использует внешнее хранилище для хранения папки Dropbox пользователя, так что пользователь имеет легкий доступ к этим файлам вне приложения Dropbox, например, с помощью файлового менеджера.

  • Базы данныхSQLite хороши, когда вы собираетесь использовать много структурированных данных и относительно жесткую схему управления ими. Проще говоря, SQLite похож на MySQL или PostgreSQL, за исключением того, что вместо базы данных, выступающей в роли демона сервера, который затем принимает запросы из сценариев CGI, таких как php, он просто сохраняется в файле.db, а доступ и запрос осуществляется через простую библиотеку. в приложении. Хотя SQLite не может масштабироваться почти так же широко, как выделенные базы данных, он очень быстрый и удобный для небольших приложений, таких как приложения Android. Я бы использовал базу данных SQLite, если бы создавал приложение для агрегации и загрузки рецептов, поскольку данные такого типа относительно структурированы, а база данных позволила бы их хорошо масштабировать. Базы данных хороши тем, что записывают все ваши данные в файл, а затем анализируют их обратно в собственном проприетарном формате. С другой стороны, хранение данных в XML или JSON не будет таким уж плохим.

  • Сетевое подключение относится к хранению данных в облаке. HTTP или FTP передача файлов и содержимого через пакеты java.net.* Делает это возможным.

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

Внутреннее хранилище в основном используется для хранения больших непостоянных данных. Вы используете внутреннее хранилище, если хотите обработать изображение, короткий видеоклип, большой текстовый файл и т. Д. Но вы не сохраняете обработанные данные во внутреннем хранилище - его функция больше похожа на ОЗУ ЦП. Объем доступного внутреннего хранилища для вашего приложения зависит от устройства, но всегда рекомендуется хранить что-либо менее 1 МБ. На данные ссылаются через путь к файлу.

Внешнее хранилище относится не только к хранилищу SDCard, но для более дорогих телефонов это может означать внутреннее монтируемое хранилище (как в Galaxy Nexus или S2). Здесь вы храните большие видеофайлы, изображения с высоким разрешением и 20-мегабайтный текстовый файл, который вы хотите проанализировать в своем приложении. Это также место для хранения данных, которыми вы хотите поделиться на разных устройствах, если вы меняете карты SD. На данные также ссылаются через путь к файлу.

Базы данных SQLite - это место, где вы можете хранить практически все, что вам нужно, в обычной базе данных - с преимуществом организации вещей в таблицы, строки и столбцы. Он лучше всего работает с вещами, которые вы хотите отобразить в пользовательском интерфейсе в виде списков - лучшим примером будет великое изобретение, известное как CursorAdapter. Сохраненные здесь данные также сохраняются при перезагрузке устройства и удаляются при удалении приложения. Вы также можете обмениваться данными между приложениями с помощью sqlite db, если подключите их к ContentProvider. Доступ к данным осуществляется с помощью курсора, где вы можете вызывать методы, как если бы вы выполняли операторы SQL.

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

Общие предпочтения - это пары ключ / значение, не более того. Так что, если вы хотите отслеживать, скажем, студентов и их результаты тестов, это действительно не будет хорошо для этого.

База данных - это просто база данных. Вы можете определить столько столбцов (и таблиц), сколько необходимо для выполнения работы.

Если это настройки вашего приложения, используйте общие настройки (почти все предпочтения, о которых я могу подумать, можно сделать таким образом), если что-то еще сложнее, используйте базу данных.

Другие вопросы по тегам