Since Android scales images, why do we need to provide anything but the highest resolution drawables?

For example, if you only have ldpi images, devices that use mdpi will scale down images in the ldpi directory if no mdpi images are provided. So why bother providing mdpi at all? Shouldn't best practice simply be to provide high resolution images for everything everywhere?

Important to note that multiple image options mean each display type gets the best resolution for its density. My MDPI images are tweaked to make the best use of the fewer pixels. A source image may be high resolution, but trying to cram it into fewer pixels leads to some smooooshing.
–
KarenJul 31 '12 at 14:14

With scaling you always lose details. Images that look good on high resolution might not look so good on lower resolution.
–
Pieter BAug 2 '12 at 11:45

3 Answers
3

There's two computer engineering concepts that you must first understand.

Memory

The first is RAM (random access memory). RAM is very fast storage compared to the harddrive. Apps are transferred from the harddrive to RAM when you use a app so you can have fast access to it. What happens when programs use more RAM than you have? Well, some pieces of the program must be paged out into the slower harddrive.

Processing

The CPU (central processing unit) usually does the bulk of the calculations that make your app run. Some more advanced operating systems offload graphics processing to the GPU (graphics processing unit). These processors must decode an image and place them on your screen as a bitmap. Think of a bitmap as a huge grid where each point represents a pixel of the image. The larger the image is, the more these processors have to decode and the more they have to work to animate these images across your screen.

Why multiple resolution assets are needed for Android (and iOS too)

Smaller images decrease memory usage. This leads to faster usage of your app because no parts of the app must be paged out to the slow harddrive. If your app uses less memory, it also means more apps can occupy memory simultaneously, meaning faster multitasking. Phones with low density screens are usually the old phones with less memory, so that's why giving a low resolution option for those phones makes the user experience more fluid.

Smaller images also reduce processing time to decode and animate the images on the screen. Again, the phones with low density screens are likely old phones with weaker processors. Providing low resolution images for these phones will make the app run faster.

Technically it's not a hard drive; it's Flash storage which is faster than an HDD. It's just (significantly) slower than memory, and less reading will always shorten the length of a read task of course.
–
Ben Brocka♦Jul 31 '12 at 13:29

In smaller images, not all details that you have in the high-res image will work nicely when scaled down. Instead of adding a nice touch, they might just end up as an ugly smear. That is why small icons not only need to be smaller, they need to be simpler. For that to work, you need to provide different files for different resolutions.

This scaling can cause artifacts in the bitmaps. To ensure your
bitmaps look their best, you should include alternative versions at
different resolutions for different screen densities.

A computer with a good graphic editing program does a much better job indeed.

I don't think the problem is really memory usage or processing time (for an average/well designed mobile app), after all this would be done only once when loading the (screen of) the app, and the higher-res image can be discarded immediately after scaling it down in memory. At least, I haven't read anything like this in Android documentation.