Android: доступ к изображениям из ресурсов / папок для рисования - PullRequest
27 голосов
/ 06 декабря 2011

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

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

Ответы [ 4 ]

10 голосов
/ 06 декабря 2011

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

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

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

3 голосов
/ 06 декабря 2011

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

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

1 голос
/ 06 декабря 2011

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

0 голосов
/ 04 апреля 2015

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

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

         //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 - самый быстрый. я пытаюсь разрешить декодирование асинхронно декодировать, а затем установить растровое изображение.

...