[HD2 Android Q&A, Help & Troubleshooting and Genera] sellotape:
Thought I'd just share this. I had been stuck with this issue for a while; basically needing to fully recharge twice a day. I tried a lot of things recommended on here and elsewhere; all of them either made minor differences, none at all, and some made things worse. Things in that category are wifi, 3g, bluetooth, gps, setcpu, task-killers, screen-dimming, resetting battery stats, starting Haret with the key lights on, etc. All these things can potentially make a difference, but didn't help much. Plus, most of them involve de-smart-ing a smartphone, and what's the point of that? I tried changing SD card, as I have a 16GB Transend class 6 card which I believe draws a few more mW than e.g. Sandisk cards, and that didn't really help either.

As an indicative measure, I could charge to 100% (and green LED) at 11pm, put the phone into Airplane mode (GPS off as well), kill all tasks that are not needed, go to bed, and by 7am the battery was on around 50%. So that's with NO comms, NO screen, nothing. Android battery use showed most of this usage was the screen. Er, no. I installed CurrentWidgit (from App Market) and got it to log; during this overnight lack of activity it averaged around 65mW, and was never below 60mW.

So after all that rambling, the answer is: radio ROM version. When I installed Android, I installed the latest radio ROM available at the time (still the latest I think); i.e. 2.15.50.14, from http://xdaforums.com/showthread.php?t=611787. After pulling my hair out trying all the above, I flashed the radio ROM with 2.12.50.02_2, and as if by magic, current draw under similar conditions to above is about 7mW; i.e. 10% of what it was, and an overnight period as above goes from 100% to 96%. Much better :)

I should point out a few extra things:

a) I arbitrarily chose that radio version. I don't really have time to try them all, so if anyone cares to test and post here, perhaps another version gets even better results. To make them meaningfully comparable, install CurrentWidget, get it to log every minute, put the phone into airplane mode, GPS off, kill any obvious large apps like Maps, camera, email polling, and don't run any "battery-saver"-category apps (I had just Messaging, Google Services and Android Keyboard under Settings > Applications > Running Services), turn the screen off for a few minutes (don't move the phone either), then turn it back on and look at the CurrentWidget log. If you post your results here, include which network you're on.

b) This "secret" is sort-of hidden in a few other threads about this, but only in passing and not really prominent. I thought it deserved its own thread so people can find it a little quicker.

c) I don't know if there are other dependencies at play here; e.g. perhaps 2.12.50.2_2 is best with O2 (which is who I'm with), and maybe others are better with other networks. I don't know enough about radio ROMs to know. If people post their results with their network we might figure it out.

d) Changing radio seemed to also cure another problem I was having, namely the data connection on both 2G and 3G regularly disappearing, even though I had a 2G/3G signal. (I used to fix this by switching between 2 virtually identical APNs, while cursing and muttering...)

e) I'm using AmericAndroid GB233 CyanogenMod7 on SD.