Какой метод хранения данных Android использовать? - PullRequest
46 голосов
/ 03 апреля 2012

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

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

Ответы [ 4 ]

102 голосов
/ 13 октября 2014

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

enter image description here


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

enter image description here

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

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


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

enter image description here

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

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

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

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

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

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


Хранилище файлов

enter image description here

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

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

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

enter image description here

ВнутреннийХранение:

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

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

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

enter image description here


SQLite

enter image description here

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

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

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


Соединение всех частей вместе

enter image description here

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

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

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

16 голосов
/ 03 апреля 2012

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

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

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

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

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

4 голосов
/ 03 апреля 2012

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

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

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

...