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