Папка кеша в android (getCacheDir ()) функционально эквивалентна папке кеша в iOS (NSCachesDirectory)?

У меня есть загружаемый контент (например, изображение игрового персонажа) в приложении, в iOS они сохраняются по пути NSCachesDirectory, который я следую рекомендациям iOS, согласно которым загружаемый контент должен сохраняться в NSCachesDirectory, который является кешем. каталог. Я изо всех сил пытаюсь сохранить файлы в getCacheDir () на стороне Android.

Сначала я думаю, что папка кеша в iOS должна быть эквивалентна (или аналогична) папке в Android, но после глядя на какой-то документ, я сомневаюсь, что они функционально идентичны:

1. iOS предлагает некоторый загружаемый контент для сохранения в папке кеша, такой контент является более постоянным временным файлом в tmp. Но в Android документ говорит, что getCacheDir () должен хранить файлы кеша, а не сохранять файлы, это заставляет меня подозревать, что папка кеша Android работает больше, чем папка tmp в iOS

2. Я не могу найти какой-либо размер ограничение на файл кеша iOS, но сторона Android говорит, что он должен иметь разумный предел размера, скажем, 1 МБ (и я думаю, что мой контент будет намного больше 1 МБ, скажем, от 50 до 100 МБ).

Итак, мой вопрос: работает ли папка кеша iOS функционально эквивалентно папке кеша в android? Правильно ли использовать getCacheDir () на стороне Android в том месте, где я использую NSCachesDirectory на стороне iOS? Если нет, то какой путь мне следует использовать на стороне Android, когда я использую NSCachesDirectory на стороне iOS?


5

Нет, папка кеша iOS не работает функционально аналогично папке кеша в android.

Подробнее Из всех вариантов хранения данных в Android ознакомьтесь с официальными документами здесь.

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

Внутреннее хранилище

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

Никогда не следует жестко указывать путь в каталоги хранилища, поскольку каталог может меняться в зависимости от используемой версии ОС Android. Кроме того, в Android 4.4 представлена ​​концепция нескольких пользователей: в этом случае внутреннее и внешнее хранилище зависят от пользователя, вошедшего в систему, и файлы других пользователей будут невидимы.. Вот некоторые из методов, используемых для получения путей к внутреннему хранилищу:

  • android.content.Context.getFilesDir (): возвращает объект java.io.File, представляющий корневой каталог внутреннего хранилища для вашего приложения из текущего контекста.

  • android.content.Context.getDir (String name, Context.MODE_PRIVATE): возвращает объект java.io.File, представляющий имя каталога во внутренней памяти, создавая каталог, если он не существует. Второй параметр также можно использовать для установки каталога в MODE_WORLD_READABLE или MODE_WORLD_WRITABLE, чтобы он был виден всем другим приложениям, но это рискованно с точки зрения безопасности и устарело в API уровня 17 (Android 4.2).

  • android.content.Context.getCacheDir (): возвращает объект java.io.File, представляющий каталог внутреннего кеша для приложения. Это означает, что небольшие файлы (в документации не более 1 МБ) могут быть удалены в любой момент, когда системе потребуется больше места для хранения. Нет гарантии, что кеш будет очищен, поэтому вы также должны очистить эти файлы вручную, когда они больше не нужны.

Как видите, файлы представлены объектом File из пространства имен java.io: не существует файлового объекта, специфичного для Android SDK, и используются стандартные API Java для чтения и записи файлов. Кроме того, нет специального разрешения для приложения, которое можно было бы установить в манифесте Android для использования внутреннего хранилища, поскольку оно уже является частным для приложения.

Внешнее хранилище

В дополнение к внутреннему хранилищу существует внешнее хранилище, используемое всеми приложениями, которое сохраняется при удалении вашего приложения. Это хранилище, которое отображается при использовании приложения проводника файлов и когда устройство подключено к вашему компьютеру. Он может быть реализован как SD-карта, которую можно извлечь, или как раздел встроенного хранилища на устройстве, поэтому ваше приложение должно работать, даже если карта удалена или заменена. Чтобы проверить текущее состояние внешнего хранилища, вы можете вызвать метод getExternalStorageState ().

На устройстве с большим количеством пользователей (начиная с Android 4.4) внешнее хранилище специфично для текущего пользователя и файлы для других пользователей недоступны. Кроме того, может быть более одного внешнего хранилища, если устройство имеет встроенное внешнее хранилище, которое представляет собой раздел во внутренней памяти и SD-карте: в этом случае встроенное хранилище является основным внешним хранилищем. Для чтения файлов из внешнего хранилища требуется разрешение READ_EXTERNAL_STORAGE, а для записи или чтения файлов требуется разрешение WRITE_EXTERNAL_STORAGE.

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

  • android.os.Environment. getExternalStorageDirectory (): возвращает объект java.io.File, представляющий корневой каталог основного внешнего хранилища устройства, которое используется всеми приложениями.
  • android .os.Environment.getExternalStoragePublicDirectory (): возвращает объект java.io.File, представляющий общедоступный каталог для файлов определенного типа на первичном внешнем хранилище устройства. Например, вы можете получить путь к общедоступному музыкальному каталогу, вызвав Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_MUSIC), или общедоступный каталог изображений, вызвав Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES).
  • android.content.Context.getExternalFilesDir (): возвращает файл java.io.File, представляющий корневой каталог основного внешнего хранилища, специфичного для вашего приложения, который находится в каталоге, возвращаемом getExternalStorageDirectory (). В отличие от других каталогов внешнего хранилища, файлы, которые вы храните в этой папке, будут удалены при удалении вашего приложения. Итак, если вам нужно хранить файлы, которые нужны только вашему приложению, вы должны использовать эту папку. Кроме того, для приложения не требуется специального разрешения на чтение или запись в собственное внешнее хранилище, начиная с Android 4.4, но для более старых версий вашему приложению требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE.
  • android.content.Context.getExternalFilesDirs (): возвращает массив java.io.File, представляющий корневые каталоги всех каталогов внешнего хранилища, которые могут использоваться вашим приложением с основным внешним хранилищем в качестве первого каталог в массиве. Все эти каталоги работают так же, как основное хранилище, возвращаемое методом getExternalFilesDir (). Если устройство имеет встроенное хранилище в качестве основного внешнего хранилища и SD-карту в качестве дополнительного внешнего хранилища, это единственный способ получить путь к SD-карте. Этот метод был представлен в Android 4.4, до этого было невозможно получить путь к дополнительному хранилищу.
  • android.content.Context.getExternalCacheDir (): возвращает объект java.io.File, представляющий кеш приложения в основном внешнем хранилище. Этот кеш не виден пользователю и удаляется при удалении приложения. В Android SDK нет механизма для удаления файлов в каталоге кеша, поэтому вам необходимо управлять своим кешем, чтобы поддерживать его разумный максимальный размер. Начиная с Android 4.4 приложению не требуется разрешение на доступ к собственному кешу, но в более старых версиях вашему приложению требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE..
Поделиться
Улучшите этот ответ
отредактировано 27 мая ’16 в 7:30
ответил 27 мая ’16 в 7:23
  • Лучшее объяснение файловой системы Android. Спасибо — Натвар Сингх 27 мая ’17 в 8:56
добавить комментарий |

Нет, папка кеша iOS не работает функционально эквивалентно папке кеша в android.

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

В Android для хранения большого объема данных вы можете использовать либо Internal или параметры внешнего хранилища данных. Также вы можете сделать свои данные конфиденциальными с помощью параметров внутреннего или внешнего хранилища данных, если вам это необходимо.

Внутреннее хранилище

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

Никогда не следует жестко указывать путь в каталоги хранилища, поскольку каталог может меняться в зависимости от используемой версии ОС Android. Кроме того, Android 4.4 представляет концепцию нескольких пользователей: в этом случае внутреннее и внешнее хранилище зависят от пользователя, вошедшего в систему, и файлы других пользователей будут невидимы. Вот некоторые из методов, используемых для получения путей к внутреннему хранилищу:

  • android.content.Context.getFilesDir (): возвращает объект java.io.File, представляющий корневой каталог внутреннего хранилища для вашего приложения из текущего контекста.

  • android.content.Context.getDir (String name, Context.MODE_PRIVATE): возвращает объект java.io.File, представляющий имя каталога во внутренней памяти, создавая каталог, если он не существует. Второй параметр также можно использовать для установки каталога в MODE_WORLD_READABLE или MODE_WORLD_WRITABLE, чтобы он был виден всем другим приложениям, но это рискованно с точки зрения безопасности и устарело в API уровня 17 (Android 4.2).

  • возвращает объект java.io.File, представляющий каталог внутреннего кеша для приложения. Это означает, что небольшие файлы (в документации не более 1 МБ) могут быть удалены в любой момент, когда системе потребуется больше места для хранения. Нет гарантии, что кеш будет очищен, поэтому вы также должны очистить эти файлы вручную, когда они больше не нужны.

Как видите, файлы представлены объектом File из пространства имен java.io: не существует файлового объекта, специфичного для Android SDK, и используются стандартные API Java для чтения и записи файлов. Кроме того, нет специального разрешения для приложения, которое можно было бы установить в манифесте Android для использования внутреннего хранилища, поскольку оно уже является частным для приложения.

Внешнее хранилище

В дополнение к внутреннему хранилищу существует внешнее хранилище, используемое всеми приложениями, которое сохраняется при удалении вашего приложения. Это хранилище, которое отображается при использовании приложения проводника файлов и когда устройство подключено к вашему компьютеру. Он может быть реализован как SD-карта, которую можно извлечь, или как раздел встроенного хранилища на устройстве, поэтому ваше приложение должно работать, даже если карта удалена или заменена. Чтобы проверить текущее состояние внешнего хранилища, вы можете вызвать метод getExternalStorageState ().

На устройстве с большим количеством пользователей (начиная с Android 4.4) внешнее хранилище специфично для текущего пользователя и файлы для других пользователей недоступны. Кроме того, может быть более одного внешнего хранилища, если устройство имеет встроенное внешнее хранилище, которое представляет собой раздел во внутренней памяти и SD-карте: в этом случае встроенное хранилище является основным внешним хранилищем. Для чтения файлов из внешнего хранилища требуется разрешение READ_EXTERNAL_STORAGE, а для записи или чтения файлов требуется разрешение WRITE_EXTERNAL_STORAGE.

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

  • android.os.Environment.getExternalStorageDirectory (): возвращает объект java.io.File, представляющий корневой каталог основного внешнего хранилища устройства, который используется всеми приложениями.
  • android.os.Environment.getExternalStoragePublicDirectory (): возвращает java. io.File объект, представляющий общедоступный каталог для файлов определенного типа на первичном внешнем хранилище устройства. Например, вы можете получить путь к общедоступному музыкальному каталогу, вызвав Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_MUSIC), или общедоступный каталог изображений, вызвав Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES).
  • android.content.Context.getExternalFilesDir (): возвращает java.io. Файл, представляющий корневой каталог основного внешнего хранилища, специфичного для вашего приложения, который находится в каталоге, возвращаемом getExternalStorageDirectory (). В отличие от других каталогов внешнего хранилища, файлы, которые вы храните в этой папке, будут удалены при удалении вашего приложения. Итак, если вам нужно хранить файлы, которые нужны только вашему приложению, вы должны использовать эту папку. Кроме того, для приложения не требуется специального разрешения на чтение или запись в собственное внешнее хранилище, начиная с Android 4.4, но для более старых версий вашему приложению требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE.
  • android.content.Context.getExternalFilesDirs (): возвращает массив java.io.File, представляющий корневые каталоги всех каталогов внешнего хранилища, которые могут использоваться вашим приложением с основным внешним хранилищем в качестве первого каталог в массиве. Все эти каталоги работают так же, как основное хранилище, возвращаемое методом getExternalFilesDir (). Если устройство имеет встроенное хранилище в качестве основного внешнего хранилища и SD-карту в качестве дополнительного внешнего хранилища, это единственный способ получить путь к SD-карте. Этот метод был представлен в Android 4.4, до этого было невозможно получить путь к дополнительному хранилищу.
  • android.content.Context.getExternalCacheDir (): возвращает объект java.io.File, представляющий кеш приложения в основном внешнем хранилище. Этот кеш не виден пользователю и удаляется при удалении приложения. В Android SDK нет механизма для удаления файлов в каталоге кеша, поэтому вам необходимо управлять своим кешем, чтобы поддерживать его разумный максимальный размер. Начиная с Android 4.4 приложению не требуется разрешение на доступ к собственному кешу, но в более старых версиях вашему приложению требуется разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE.
Оцените статью
Botgadget.ru
Добавить комментарий