Phone and text isn't data. I don't know if that makes a difference.
Yep, it does. Incoming phone calls and SMS are basically the same thing: a "page" (ring) from the carrier. They're one push method. The carrier always knows where your
phone number is located. And your phone is constantly listening for an incoming page.
On the other hand, data connections use
IP addresses, which are temporary. (There's not enough to give each phone a permanent one of its own... at least not until we all go to IPV6.)
Also, if MobileMail.app is polling a server every 5-30 minutes, wouldn't that be the same as "fetch"? How come when I send an email to myself (from another email address) I get it within SECONDS of sending it and it has no big affect on my battery life.
Yep, in this case, "push" is really a "fetch" request with an extended timeout.
The phone sends a request and waits for a reply. The server gets the request and thus has a known connection back to the phone that it can use if/when it gets something to send.
- If the server gets something to send, it uses the request path to send a reply, and thus imitates a push.
- If the server has nothing to send by the time the timeout comes, it sends back a null reply and the phone tries again with the same or longer timeout.
- If the server doesn't send anything within the timeout, the phone assumes the connection doesn't last that long, and sends another request with a shorter timeout.
So the timeout adjusts to be as long as the shortest amount of time that your connection is good for without any activity. In most cases, that's around 30 minutes, and thus the push would use about the same battery as a 30 minute fetch.
If, on the other hand, your connection dies every ten minutes of inactivity, the phone will have to shorten the timeout to nine minutes, and then the push uses three times the battery of a 30 minute fetch.