Вопрос: Как правильно организовать загрузку файлов из какого-то источника в Android?

Лучший ответ:
Прежде чем задавать вопросы вы хотябы прочитайте от начала до конца хоть один учебник, напримеи вот https://startandroid.ru/ru и конечно же документацию по os андроид
1) Первое что вам необходимо сделать, это реализовать  API (гуглите) которое будет возвращать набор изображений в удомном для вас виде, я рекомендую json
2)xml -  на мой взгляд логичнее было-бы заменить на json так как с ним удобнее работать, но если нет, то используем 
 XmlPullParser https://startandroid.ru/ru/uroki/vse-uroki-spiskom...
3) Для http запросов советую использовать одну из множество библиотек, например okHttp или например asynchronous http client на мой взгляд тоже более менее нормальная библиотека (кстате инстаграм использкует вроде как бы эту библиотеку)
4) Для парсинга json можно использовать библиотеку GSON
5)  Для того чтобы отобразить изображение по ссылки в ImageView я вам советую (в прочем как и доки гугла) использоватьодну из библиотек предназначенных специально для этого, например picasso square.github.io/picasso

Худший ответ:
Интересный вопрос. Интересен он не уникальной задачей или же сложной задачей, а тем, что вариантов реализации поставленной задачи огромное количество.
Давайте накидаю Вам сходу некоторое количество равноправных решений.
1) Скачивание нужных файлов по любому протоколу (HTTP\FTP\SFTP), который Вам больше подходит. Если также необходим хостинг - выбираете любого хостера по вашему вкусу. Буквально. Можно даже обойтись сверх дешевыми статичными хостингами. Из минусов - самостоятельная настройка сервера, хуже аптайм, чем в следующем варианте.
2) Используете уже готовые связки API + хостер. Firebase, dropbox etc. Опять же, что угодно. К примеру, Dropbox: https://www.dropbox.com/developers-v1/core/start/a... Из минусов - почти идеальное решение, но нет кое-каких очень приятных возможностей. Также, стоит денег.
3) Используете систему контроля версий. К примеру, GIT. Из плюсов - меньше трафика при обновлении вашего сета данных, 100% распределенная система, до какой-то степени "бесплатность" (при условии Open-Source лицензии на сет данных и того, что объем трафика не будет превышать бесплатные лимиты). Из минусов - сложнее реализовывать на стороне клиента.
4) Используйте p2p. Самая сложная в реализации опция, нет функционала контроля версий. Зато самые низкие затраты на оплату траффика.
Опции накидал сумбурно, так как Ваш вопрос не несет в себе должного уровня конкретики. Вариантов решения поставленной задачи просто огромное количество, все обладают своими плюсами и минусами. Чтобы предложить оптимальное решение, необходимо знать планируемый объем трафика, требования к аптайму, требования к функционалу решения (к примеру, нужны ли Вам функции контроля версий, и насколько высока эта нужда), бюджет, уровень Ваших навыков. Попробуйте сформулировать вопрос конкретнее и тогда вместо воды может получите совет, применимый именно для Вашего проекта.
UPD. Лично я бы сделал либо на GIT, либо на Dropbox. API готовы, хостинги хорошие. Dropbox - один из самых простых вариантов, GIT - требует знания NDK (чуть сложнее в имплементации), зато дает просто идеальный функционал для редактирования и обновления сета данных.