Right after I got a Samsung Galaxy S3, I came to a realization that I'm practically tethered to a USB cable - a freshly-charged battery would last at most 10-12 hours. I bought an external battery, just for my own peace of mind and as well to convince myself that I actually do have a mobile phone. However, the external battery and cables turned out to be a lot bulkier than I thought and I decided to figure out what's wrong with the phone.
The battery graph showed that cell phone radio consumed the bulk of the power. Well, I need my phone, so I started looking for other ways to save power.
First, I disabled all bloatware - Flipboard, Dropbox, etc. This didn't affect much battery life, but there was no more annoying updates asking for full permissions. Android doesn't allow users to uninstall apps, but if they are disabled, their icons become hidden and update notifications are gone. For some apps, I had to uninstall all updates to make the Disable button work.
The next couple of days I tried just about everything. I tried to avoid using the screen much, tried disabling WiFi, disabling more apps, etc, and the result was the same - I ended each day on the external battery, tangled in USB cables. It was clear at this point that the source of the problem was the mobile radio.
My next step was to disable the base 4G protocol - LTE in Mobile Networks > Network mode and switch the phone to GSM/HSPA only. Bam! That was it - I went from 12 hours on a single charge to whole two days. At first I was worried that without the LTE I wouldn't be able to browse image-heavy sites, like Flickr and Instagram, but all images came back quite quickly, so I wasn't worried.
I asked around and it seems that other phones, like iPhone 5 or HTC, delivered the 4G goodness without leaking power like a sieve. Hopefully, Samsung realizes that their implementation of the 4G has a major flaw and updates their firmware soon to address this issue. Until then, yesterday's technology is good enough for me.
December 6th, 2012
Samsung released a firmware update that addressed the issue and turning LTE back on no longer drains the battery. Back to speed surfing!
December 22nd, 2012
After using the new firmware for a couple of weeks, I realized that I spoke too soon. While the firmware update did improve battery life by a few hours when using LTE, I still ended up with a drained battery by the end of the day at the office (the battery does last longer outside). I went back to the settings, just to learn that Auto GSM/HSPA option was gone and the list was now just three options - Auto LTE/GSM/W-CDMA, GSM or W-CDMA. I switched the network to W-CDMA (Bell Canada) and my battery life went back to two full days.
May 15th, 2013
A few weeks ago I finally figured out what was draining my battery since the firmware update. First, I noticed that before the update the main power consumer was Cell standby and after the update I often saw Download Manager or Media Storage at the top of the list.The former made me think that it was still related to the network and downloads, but the answer was much simpler.
It turned out that Google likes to index their files so much that any changes to the file system that didn't go through some channel they expected would trigger a re-scan of all files, which pegged one of the CPUs at 100% while android.process.media went through all of the files.
Here's how you can see what's going on, but don't do it if you are far away from a USB plug. Download an app that allows you to monitor CPU usage by process. I used OS Monitor. Run My Files, which is a built-in app shipped with the S3, navigate to any of your image files and rename it (e.g. add an underscore symbol to the file name), you will see as CPU usage for android.process.media jumps to about 50% if you have a two-core version of the S3 and will stay there for a long while. In my case it was just over 30 minutes, which made the phone warm up quite a bit and chewed through at least 25% of the battery.
Once I found this smoking gun, I started pay closer attention to how I used the phone and there it was - every time I connected my phone to a desktop computer and copied pictures in either direction, android.process.media would go crazy for about half hour. I also found that some apps would trigger the same behavior if they accessed the file system in some specific way. For example, exporting S-Memo text as PDF sets off this process. Interestingly enough, the stock camera plays along nicely with the file system, which implies that there's some kind of official Android notification that allows the built-in camera to save pictures without setting wheels of indexing into motion.
Now I am careful which apps I run and monitor how they use the CPU for a couple of days after I install them. I also never copy pictures to my desktop any time I'm about to go away from a USB socket. With these precautions, my phone can last for more than two days on a single charge.