Когда следует использовать активы, а не сырые ресурсы в Android?
Я нахожусь в середине моих исследований в мире Android, и я просто рассмотрел ресурсы и ресурсы Raw. Я пытаюсь понять причину использования ресурсов Raw и Assets.
-
Они оба обеспечивают поток несвязанных ресурсов.
-
Кажется, что Активы обеспечивают гораздо большую гибкость и функциональность, чем ресурсы 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.