Фон
Некоторые файлы приложения могут храниться только в папках res/raw или assets.
Каждая из этих папок работает очень похожей на другую. папка res/raw позволяет легче обращаться к файлам со всеми другими преимуществами файлов ресурсов, в то время как папка с данными позволяет обращаться к ним независимо от имени и структуры файла (включая папки и подпапки).
Основная идея загрузки файлов примерно одинакова для обоих. У вас просто выбор простоты использования, зависит от ваших потребностей.
Проблема
Я помню, что очень давно я нашел какое-то особое поведение обеих этих папок:
-
В каждой папке в папке с ресурсами было максимальное количество файлов. Я думаю, что это было около 500, но не уверен. Я заметил это поведение очень давно,
-
Некоторые сказали, что файлы в папке с активами имеют максимальный размер для файлов (пример здесь), Я никогда не видел такого ограничения. Даже на Android 2.3 в то время.
-
Некоторые сказали (пример здесь), и он по-прежнему полагал даже сегодня (пример здесь), что если вы загружаете файл из res/raw, это может занять гораздо больше памяти, чем если бы вы взяли его из активов папка.
Что я пробовал
Для # 1 мне никогда не приходилось использовать больше файлов после проекта, над которым я работал, и в то время, когда я работал над ним, мы просто разбивали файлы на несколько папок.
Для # 2, как я уже писал, я никогда не замечал этого. Я использовал гораздо большие размеры файлов.
Для # 3 я попытался создать образец проекта, который сравнивает использование памяти между двумя методами. Я не заметил никакой разницы (использования памяти или времени для загрузки) между двумя методами. Особенно не важно. К сожалению, у меня есть только одно устройство (Nexus 5x), и у него есть совершенно новая версия Android (8.1). Возможно, начиная с конкретной версии Android нет никакой разницы между этими двумя методами. Другой причиной этого является то, что сложнее измерить использование памяти на Java из-за GC, и я уже заметил, что на Android 8.x память работает немного иначе, чем раньше (написано об этом здесь).
Я попытался прочитать о различиях и ограничениях выше, но все, что я нашел, это очень старые статьи, поэтому я думаю, что с тех пор все могло измениться.
Вопросы
На самом деле это всего один вопрос, но я хотел бы разбить его, если ответ будет сложным:
-
Существуют ли какие-либо существенные или уникальные ограничения или различия между использованием папок res/raw и активов?
-
Чтение файла из папки с ресурсами (путем создания потока ввода из него) действительно занимает меньше памяти, чем использование res/raw? Настолько, что даже один из самых оцененных разработчиков ( здесь) решает выбрать его, даже сейчас?
-
Были ли указанные ограничения существовали до конкретных версий Android, а затем они стали идентичными с точки зрения каких-либо ограничений (кроме файлов, обозначающих файлы для res/raw, но это только то, как это работает)?
-
Если да, то из какой версии Android они работают примерно одинаково?