Q:

Melhor forma se armazenar imagens em base de dados

Tenho uma aplicativo android que utiliza um banco de dados mysql,  para armazenar informações do perfil dos meus usuários, mas gostaria de saber a melhor forma de armazenar as fotos da cada usuário, pois pensei em fazer upload da imgs quando ele tirasse e salvasse apenas o url, porém essa operação de upload e download de imgs toda hora que eu for abrir o perfil de um usuário não é muito custosa? Se eu for fazer um listview com as fotos de várias pessoas se eu baixar todas estou gastando muito certo? Se essa for a solução ideal, acredito que de alguma forma devo diminuir o tamanho da imagem antes de upar,  pois tem celulares com resolução alta que salvam as imgs com mais de megas. 

A:

Você pode utilizar a library  Universal Image Loader for Android ela trabalha exatamente nesses questões de carregar url de imagens em listview ou gridview. Você ainda consegue fazer tratamento para renderizar o tamanho das imagens.
Exemplo:
// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using.
// See the sample project how to use ImageLoader correctly.
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .memoryCacheExtraOptions(480, 800) // default = device screen dimensions
        .diskCacheExtraOptions(480, 800, null)
        .taskExecutor(...)
        .taskExecutorForCachedImages(...)
        .threadPoolSize(3) // default
        .threadPriority(Thread.NORM_PRIORITY - 1) // default
        .tasksProcessingOrder(QueueProcessingType.FIFO) // default
        .denyCacheImageMultipleSizesInMemory()
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
        .memoryCacheSize(2 * 1024 * 1024)
        .memoryCacheSizePercentage(13) // default
        .diskCache(new UnlimitedDiscCache(cacheDir)) // default
        .diskCacheSize(50 * 1024 * 1024)
        .diskCacheFileCount(100)
        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
        .imageDownloader(new BaseImageDownloader(context)) // default
        .imageDecoder(new BaseImageDecoder()) // default
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
        .writeDebugLogs()
        .build();

Simple
String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view 
//  which implements ImageAware interface)
imageLoader.displayImage(imageUri, imageView);
// Load image, decode it to Bitmap and return Bitmap to callback
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        // Do whatever you want with Bitmap
    }
});

