As with previous IOS versions, battery life suffers because of illogical way "snitch" connections to push.apple.com are maintained by the system
- push.apple.com socket never jumps from GSM/3G data stack to Wifi when Wifi is enabled. Which means that unlike any other phone on earth switching on Wifi doesn't disable cellular data by default, instead both are up and drain battery. You can create correct behavior by disabling mobile data manually and force snitch socket to jump to wifi connection. At which point your phone will last 3-4 days without much problem and phantom "usage" in stats will disappear. Those of you who tried, know it works.
Image
- Battery drain when you don't have wifi available is slightly harder to fix, but the way I see it - I think there are two bugs. One is - data polling is too aggressive and gets stuck very often, making phone work hard to re-send all the data all the time. The phantom usage in 5.1 is not as much issue as in 5.0.1 but it's definitely there. Second issue - and I'm speculating here - there appears to be some sort of priority in IOS given to re-establishing 3G snitch connection to mothership over anything else. The polling is so aggressive that in areas of low mobile data coverage, when data connection to push.apple.com socket gets interrupted the phone starts desperately searching for alternative 3G mast to jump to draining battery. That priority is wrong. Correct behavior would be to fall back onto 2G/E instead of initiating search for better 3G signal. However, speculating here - because GPRS/E cannot be used in the middle of phone call, iphone decides mothership connection is more important than your phone call and jumps mast anyway, even if there is still enough coverage to maintain call or 2G connection.
Theoretically, if one of the jailbreakers wanted to write correct behavior into software ie. switch off cellular data when wifi is on - I think we would immediately see 4-5 days standby time with moderate usage. And then do some tests with some sort of "snitch" sandbox - where the push.apple.com socket would be redirected to 127.0.0.1 and you could set interval - every 15 or 30 minutes when its allowed to actually go out onto the internet and connect to real apple server.
Even though I struggled a bit to get my head round this, it does help explain why my battery level is much better with cellular data switched off, so thanks!