Все сетевые вызовы должны выполняться в фоновом потоке.Поэтому загрузка изображения должна выполняться в фоновом потоке.Thread
или AsyncTask
подойдет.
Изображения уже сжаты, если вы не хотите изменить тип сжатия или изменить его размер.Посмотрите в библиотеку обработки изображений.Или используйте этот метод.Отсюда. Как изменить размер растрового изображения в Android?
Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));
Любое использование веб-службы должно выполняться асинхронно, поскольку это может занять некоторое время, и пользовательский интерфейс не должен зависать.