Когда я должен использовать активы, а не сырые ресурсы в Android? - PullRequest
138 голосов
/ 05 марта 2012

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

  1. Они оба предоставляют некомпилированный поток ввода ресурсов.

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

    a.Вы можете создать структуру папок в разделе «Ресурсы», а не в «Сырье»

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

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

Ответы [ 3 ]

172 голосов
/ 05 марта 2012

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

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

  • Папка Assets является каталогом «appendix» .Класс R не генерирует идентификаторы для размещенных там файлов, поэтому он менее совместим с некоторыми классами и методами Android.Кроме того, гораздо медленнее получить доступ к файлу внутри него, , поскольку вам нужно получить дескриптор для него на основе строки .Однако некоторые операции проще выполнить, поместив файлы в эту папку, например скопировать файл базы данных в системную память.Нет простого способа создать XML-ссылку Android на файлы в папке «Ресурсы».

25 голосов
/ 13 мая 2015

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

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

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


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

0 голосов
/ 07 августа 2018

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

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

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

...