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

152

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

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

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

    а. Вы можете создавать структуры папок под, assetsно не подraw

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

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

Mortalus
источник

Ответы:

183

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

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

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

user370305
источник
4
@ user370305 Привет, есть ли ограничение в 1 МБ для новой ОС Android? Я не могу найти никаких документов, которые говорят об этом. У вас есть идеи, где я могу найти это?
GMsoF
6
@GMsoF - для этого нет никакого конкретного документа. Но у меня есть несколько полезных ссылок для вас. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/… 3. stackoverflow.com/questions/6809651/… 4. elinux.org/Android_aapt и 5. android-developers.blogspot.in/2012/03/… Просто пройдите согласно ср.
user370305
2
@GMsoF - Есть много хитростей, чтобы поместить файл размером более 1 МБ в /assetкаталог.
user370305
10
У меня никогда не было ограничений на размер файла для папки активов. ты уверен, что есть такая вещь?
Android-разработчик
2
Да, до Android 2.2 или 2.3 любой сжатый файл активов с несжатым размером более 1 МБ не может быть прочитан из APK. Который упоминается здесь groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305
34

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

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

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


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

принц
источник
1
Являются ли необработанные файлы лучшим вариантом, если вы хотите скопировать большой файл в папку хранилища?
живи-люби
@ 40-Love Нет ограничений на размер файла для Android 2.3 и выше, если вы не поддерживаете более ранние версии. Вы можете выбрать любую папку для хранения в зависимости от ваших требований. Основным отличием является способ доступа к этим файлам.
Принц
1

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

Файлы / 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.

Shubhamhackz
источник
Вы можете использовать file:///android_res/префикс для указания на необработанный ресурс.
androidguy