Подтвердить что ты не робот

Android: доступ к изображениям из активов/доступных папок

В приложении, в котором я сейчас работаю, есть сотни изображений. На данный момент я храню их в папке "Drawable". Я думал о перемещении всех из них в папку "Активы".

Мой вопрос: есть ли разница в производительности при использовании обоих подходов?

4b9b3361

Ответ 1

Я не думаю, что есть разница в производительности использования этих двух папок, я думаю, что с помощью выпадающей папки вы можете легко получить изображения (все будут индексироваться в файле R, что делает это намного быстрее (и намного проще!) загрузить их.), и если вы хотите использовать его из актива, тогда вы должны использовать AssetManager, а затем используя AssetFileDescriptor, вы должны получить эти изображения.

  • Assets также может быть организована в иерархию папок, а это не поддерживаемых ресурсами. Это другой способ управления данными. Хотя ресурсы охватывают большинство случаев, активы имеют случайное использование.

  • В каталоге res/drawable каждому файлу присваивается предварительно скомпилированный идентификатор к которым можно легко получить доступ через R.id. [res id]. Это полезно для быстро и легко получить доступ к изображениям, звукам, значкам...

Ответ 2

Насколько я знаю, не должно быть большой разницы, но я бы предпочел пойти с Drawable.

Drawable дает вам, помимо индексации, возможность сражаться с фрагментацией плотности экрана, а активы не должны зависеть от плотности. Наличие больших снимков на небольших экранах и/или более низких спецификационных телефонах (ОЗУ, ЦП) может вызвать настоящую проблему и повлиять на удобство использования и удобство использования приложений.

Ответ 3

Я думаю, что основное различие между этими двумя заключается в том, что папка Drawable индексируется, и вы можете использовать android альтернативные ресурсы.. Поэтому я считаю, что между этими папками ресурсов нет разницы.

Ответ 4

Собственно, я также столкнулся с проблемами. я хочу, чтобы изображение моего приложения ImageView загружалось из активов/вместо res/drawables, так что я могу динамически обновлять APP из Интернета.

Из моего теста/ощущения производительность, скорее всего, будет очень различной, если вы не обратите внимание.

         //v.setImageBitmap(ImageUtil.getBitmapFromAsset(this, "data/dog/dog_0001.png", 60, 60));
        //v.setImageDrawable(ImageUtil.getDrawableFromAsset(this, "data/dog/dog_0001.png"));
        v.setImageResource(R.drawable.dog_0001);

мое приложение будет делать выше в Activity onCreate. кажется, что setImageResource быстрее всего.

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