Коли я повинен використовувати активи на відміну від сировинних ресурсів в Android?


151

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

  1. Вони обидва забезпечують некомпільований потік вхідних ресурсів.

  2. Схоже, активи надають набагато більше гнучкості та функціональності, ніж сировинні ресурси.

    а. Ви можете створювати структури папок під, assetsале не підraw

    б. Ви можете динамічно перелічити всі ресурси в assetsпапці, але не в rawпапці.

Отже, навіщо я використовувати сировинні ресурси в Android?


Відповіді:


182

Основні відмінності між rawпапкою та assetsпапкою.

  • Оскільки raw є підпапкою Resources (res), Android автоматично генерує IDфайл для будь-якого файлу, що знаходиться всередині нього. Потім IDвін зберігається у R classфайлі, який буде посилатися на файл, тобто його можна легко отримати з інших класів та методів Android та навіть у файлах Android XML. Використання автоматично створеного ідентифікатора - це найшвидший спосіб отримати доступ до файлу в Android.

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


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
У мене ніколи не було обмеження розміру файлу для папки активів. ти впевнений, що таке є?
андроїд розробник

2
Так, до Android 2.2 або 2.3, будь-який файл стисненого об’єкта з нестисненим розміром понад 1 Мб не може бути прочитаний з APK. Що згадується тут groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305

33

З документації Android , то raw/каталог використовується для:

Довільні файли для збереження у сирому вигляді. Щоб відкрити ці ресурси з сировини InputStream , зателефонуйте Resources.openRawResource () з ідентифікатором ресурсу, який є R.raw.filename .

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


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


1
Чи є сировинні файли найкращим варіантом, якщо ви хочете скопіювати великий файл у папку зберігання?
live-love

@ 40-Love Немає обмежень щодо розміру файлів для Android 2.3 і вище, якщо ви не підтримуєте більш ранні версії. Ви можете вибрати будь-яку папку зберігання залежно від вашої потреби. Основна відмінність - спосіб доступу до цих файлів.
Принц

1

Додавання відповідей, наведених вище ...

/ res / string, / res / layout, / res / xml файли тощо все збирається у двійковий формат. Але якщо ви розміщуєте файли, включаючи XML-файли, в каталозі / res / raw /, вони не збираються у бінарний формат.

Однією з великих переваг використання активів над сировинними ресурсами є file:///android_asset/ Урі префікс Це корисно для завантаження активу у WebView. Наприклад, для доступу до ресурсу, розміщеного в активі / foo / index.html у межах вашого проекту, ви можете зателефонувати до loadUrl("file:///android_asset/foo/index.html")завантаження цього HTML у веб-перегляд.


Ви можете використовувати file:///android_res/префікс для вказівки на сировинний ресурс.
androidguy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.