Когда следует использовать активы, а не сырые ресурсы в Android?

Я нахожусь в середине моих исследований в мире Android, и я просто рассмотрел ресурсы и ресурсы Raw. Я пытаюсь понять причину использования ресурсов Raw и Assets.

  1. Они оба обеспечивают поток несвязанных ресурсов.

  2. Кажется, что Активы обеспечивают гораздо большую гибкость и функциональность, чем ресурсы Raw.

    а. Вы можете создать структуру папок в разделе Активы, а не под Raw

    б. Вы можете динамически перечислить все ресурсы в папке с ресурсами, а не в папке Raw.

Итак, зачем использовать ресурсы Raw в Android?

Ответ 1

Основные отличия между папкой raw и папкой Assets.

  • Поскольку raw является подпапкой Resources (res), Android будет автоматически создайте ID для любого файла, расположенного внутри него. Эта ID затем сохраняется R class, который будет служить ссылкой на файл, то есть его можно легко получить из других классов Android и методы и даже в файлах Android XML. Использование автоматически Сгенерированный идентификатор - это самый быстрый способ получить доступ к файлу в Android.

  • Папка "Активы" - это каталог "приложение" . Класс R не генерировать идентификаторы для файлов, размещенных там, поэтому его менее совместимый с некоторыми классами и методами Android. Кроме того, его гораздо медленнее доступ к файлу внутри него, , так как вам нужно будет получить к нему ручку на основе строки. Однако некоторые операции легче выполнять размещение файлов в этой папке, например копирование файла базы данных в системная память. Theres нет (легкий) способ создать Android XML ссылку на файлы внутри папки "Активы".

Ответ 2

В документации для Android каталог raw/ используется для:

Произвольные файлы для сохранения в их исходной форме. Чтобы открыть эти ресурсы с помощью исходного InputStream, вызовите Resource.openRawResource() с идентификатором ресурса, который является R.raw.filename.

Однако, если вам нужен доступ к исходным именам файлов и иерархии файлов, вы можете рассмотреть возможность сохранения некоторых ресурсов в каталоге assets/ (вместо res/raw/). Файлы в активах/не имеют идентификатор ресурса, поэтому вы можете читать их только с помощью AssetManager.


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

Ответ 3

Добавляя к ответам, приведенным выше...

/res/strings,/res/layout,/res/xml и т.д. все скомпилируются в двоичный формат. Но если вы помещаете файлы, в том числе файлы XML, в каталог /res/raw/, они не собираются в двоичном формате.

Одним из больших преимуществ использования активов над необработанными ресурсами является file:///android_asset/ Uri prefix. Это полезно для загрузки актива в WebView. Например, для доступа к ресурсу, расположенному в loadUrl("file:///android_asset/foo/index.html") assets/foo/index.html, в вашем проекте вы можете вызвать loadUrl("file:///android_asset/foo/index.html") загружая этот HTML-код в WebView.