Какой метод хранения данных Android использовать?
Документация по Android содержит приведенные ниже варианты, но не объясняет, для каких обстоятельств каждый из них лучше всего подходит. Каковы плюсы и минусы каждого метода? например, при каких условиях SQL был бы лучше общих настроек?
- Общие настройки
- Внутреннее хранилище
- Внешнее хранилище
- Базы данных SQLite
- Сетевое подключение
Переведено автоматически
Ответ 1
Различные варианты хранения в Android
Контент-провайдеры
Учтите, что структурированные данные, добавленные на устройство из application1, недоступны для другого application2, присутствующего на том же устройстве, но фотография профиля, добавленная на устройство с помощью
application1
, доступна дляapplication2
, запущенной на том же устройствеРассматривайте устройство Android как город, приложения в нем - это дома в городе, люди в домах (приложение) - это данные. Теперь контент-провайдер подобен посреднику в городе (устройство Android). Этот брокер предоставляет доступ жителям города для поиска разных домов, ссылаясь на то, что контент-провайдер на устройстве Android предоставляет доступ к данным на устройстве для различных приложений.
Общие настройки
Допустим, у меня есть приложение, скажем, Face book, которое я использую для входа в свою учетную запись.
Теперь, когда я в первый раз ввожу свое имя пользователя и пароль, чтобы получить доступ к своей учетной записи. Допустим, я выхожу из приложения час спустя, я снова использую то же приложение Face book для повторного входа в свое приложение.
Мне нужно снова ввести имя пользователя и пароль для входа в свою учетную запись, и я устанавливаю тему для своего приложения и другие настройки того, как мое приложение выглядит на моем текущем телефоне
This is un-necessary because consider I am using my phone to login to
the application. So I will always use my phone to login again and
again, thus entering my credentials again and again is more work
shows it’s not a user friendly appShared Preferences is very handy in such scenarios where I can use
its feature to share my data in a xml file Which physically exists in
the Android app installed in my phone which is not destroyed even if
the app is closed. Here we can save user preferences data of the
current application.As a result next time I open my app in my phone I can see the data
automatically filled in the necessary fields and the settings are
File Storage
In Android we can use the device storage space to store the data in
it for the applications. The type of data involves things such as a
text file, image file, video file, audio file etc.As seen in the figure as we can see that there are two places we can
do this. One way is to write the raw files into primary /secondary
storage. Another way is to write the cache files into the
primary/secondary storage.There is also difference between storing raw data and the cache data,
the raw data once stored in memory by user has to be explicitly
deleted by the user explicitly otherwise it would exist till then.
Cache data stored in memory is not a permanent data because the
system automatically deletes it if it feels there is shortage of
memory.
Внутреннее хранилище:
Предположим, что пользователь приложения сохранил данные во внутреннем хранилище, тогда только этот пользователь этого приложения имеет доступ к этим данным на мобильном устройстве, и эти данные автоматически удаляются, когда пользователь деинсталлирует приложение. Кстати, о том, какая внутренняя память является частной.
Каталог внутреннего хранилища приложений хранится под именем package name в специальном месте файловой системы Android.
Другие приложения или пользователи текущего приложения не имеют доступа к файлу, установленному конкретным пользователем и конкретным приложением, если только он явно не предоставлен пользователю для чтения / записи.
SQLite
Sqlite используется для локального хранения более структурированных данных на мобильном устройстве, где запущено приложение для Android. Структурированные данные включают информацию о состоянии, показанную на рисунке, например, информацию об ученике в виде строк и столбцов.
Sqlite предлагает аналогичную функциональность, как Mysql и oracle, но с ограниченными функциональными возможностями. Некоторые вещи включают выполнение операций запроса над таблицами. Хотя есть функции, такие как создание представлений, но также некоторые функции недоступны, например хранимые процедуры.
Sqlite очень полезен для хранения сложных и больших данных, которые можно загрузить один раз и использовать снова и снова, пока приложение не будет запущено. При закрытии приложения база данных sqlite также уничтожается.
Собираем все части вместе
Ответ 2
- Общие настройки хороши для хранения... настройки приложения и другие небольшие фрагменты данных. Это действительно простое постоянное хранилище ключей строк для нескольких типов данных: 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. * позволяет это сделать.
Ответ 3
SharedPreferences в основном предназначен для настроек конкретного приложения, доступ к которым вы можете получить через меню настроек, например, через настройки приложения. Здесь лучше все упростить - в основном логические флаги, короткие строки или целые числа. Данные SharedPreferences сохраняются при перезагрузке устройства и удаляются вместе с удалением приложения. Данные сохраняются в виде пары ключ-значение.
Внутреннее хранилище в основном используется для более крупного непостоянного хранилища данных. Вы используете внутреннее хранилище, если хотите обработать изображение, короткий видеоклип, большой текстовый файл и т.д. Но вы не храните обработанные данные во внутреннем хранилище - его функция больше похожа на оперативную память процессора. Объем доступной внутренней памяти для вашего приложения зависит от устройства, но всегда полезно хранить что-либо размером менее 1 МБ. Ссылки на данные передаются по пути к файлу.
Внешнее хранилище относится не только к хранилищу на SD-карте, но для телефонов более высокого класса это может означать внутреннее подключаемое хранилище (например, в Galaxy Nexus или S2). Здесь хранятся видеофайлы большого размера, изображения с высоким разрешением и текстовый файл объемом 20 мегабайт, который вы хотите проанализировать в своем приложении. Это также место для хранения данных, которыми вы хотите поделиться между устройствами при замене SD-карт. На данные также можно ссылаться через путь к файлу.
Базы данных SQLite позволяют хранить практически все, что вам нужно, в обычной базе данных - с преимуществом организации данных в виде таблиц, строк и столбцов. Лучше всего он работает с объектами, которые вы хотите отображать в пользовательском интерфейсе в виде списков - лучшим примером может служить великое изобретение, известное как CursorAdapter. Данные, хранящиеся здесь, также сохраняются при перезагрузке устройства и удаляются при деинсталляции приложения. Вы также можете обмениваться данными между приложениями с помощью sqlite db, подключив их к ContentProvider. Доступ к данным осуществляется с помощью курсора, где вы можете вызывать методы, как если бы вы выполняли инструкции sql.
Сетевое подключение на самом деле не является методом хранения данных, но может быть способом сохранения данных для конкретного пользователя при условии, что устройство подключено к Интернету с использованием какой-либо аутентификации. Вам приходится балансировать между загрузкой данных каждый раз, когда это необходимо приложению, или одноразовой синхронизацией данных, что в конечном итоге приведет к использованию другого из упомянутых выше вариантов хранения.
Ответ 4
Общие настройки - это пары ключ / значение, не более того. Так что, если вы хотите отслеживать, скажем, студентов и их результаты тестов, для этого это действительно не подойдет.
База данных - это просто база данных. Вы можете определить столько столбцов (и таблиц), сколько вам нужно для выполнения работы.
Если это настройки для вашего приложения, используйте общие настройки (почти любые настройки, которые я могу придумать, могут быть выполнены таким образом), если это что-то более сложное, используйте базу данных.