Programatically you aren't accomplishing the same thing and the push notification system has some serious downsides (namely its lack of reliability).
I see no evidence anywhere that APNS/Cloud-to-Device is less reliable than a background daemon. I see plenty of reasons why APNS/Cloud-to-Device is a better solution than background daemons for everybody. Perhaps you can explain in technical detail why you might think so?
Push notifications cannot do everything that a simple daemon running in the background can. They may use less data, but that's simply because they're doing less.
They're using less data, because they're eliminating overhead to accomplish the same task. If you don't understand that, you've missed a very important detail and should not be writing networking code.
Again, you have not shown that Android is a "data hog". A program performing the task it is designed to do does not make it a "data hog".
A program performing the task it is designed to do, is a "data hog" when it uses more data than necessary to perform the task. Are you saying a badly implemented background task using the network is not a "data hog" because it was designed to perform badly?
The majority of applications would have no negative effect for the user and no loss of features using APNS/Cloud-to-Device.
Indeed push notifications can't do everything. But the majority of applications, using push notifications over background daemons gets you better battery life, higher reliability, and better data efficiency for no loss in features.
For every Android application which implemented a background daemon and did not switch to Cloud-to-Device in Android 2.2, they're simply wasting battery life, providing a worse experience to their user, burning more data, and in some cases, requiring themselves to have even more server costs. It's not just being a "data hog" but crippling battery life as well.
If you want to compare fairly, the Push Notification system in Android does not use more data than it does in iOS.
It's called Cloud-to-Device. It was introduced in Android 2.2. And I never said it was less efficient than APNS. In fact, I was saying that it basically is a copy of APNS and that people should use it. It sounds like you didn't understand what I said earlier.
Using Cloud-to-Device is good. Using background tasks to poorly implement a feature that Cloud-to-Device can do for you is bad. Too bad because so many developers wrote their code for Android 1.6-2.1, most apps don't use Cloud-to-Device. Hence those apps are almost certainly dragging the Android user down.
Doesn't help that it took so long to get phones on 2.2+. (As a Android dev, you can choose to ignore fragmentation, to do more work, or to have less potential customers. You can only pick one.)
Even Apple realises that Push Notifications don't work for everything - hence the VOIP API in iOS 4.0+.
By the way, it's not a VOIP API in iOS4, it's a plist tag that says "I'm a VOIP app doing VOIP things, and request that I be allowed to run as a background process."