Despite my rather lukewarm reaction to the original iPhone announcement, I think I've become an iTard.
I have two mobile phones -- one for personal use that I own and one for a mixture of personal and business that's owned by my company. The phone that I own is a T-Mobile G1 -- also known as the HTC Dream -- and runs Android. My company phone is an iPhone 3G which, obviously runs iOS.
The G1 has a faster processor than the iPhone, not to mention more RAM. It has a better camera then the iPhone 3G with autofocus, supports multitasking, has a slide-out keyboard, has a digital compass which is reasonable accurate, and really does look rather nice on paper. Here's the kicker: I can't bloody stand using the thing.
Why? Fucking Android, that's why. I've never seen any OS that can take a powerful ARM platform and absolutely bring it to its knees. Android 1.1 (which came on the device when I bought it) ran rather well, keeping up with an iPhone 2G/3G running iOS 3 (definitely not as speedy as an iPhone 2G/3G with iOS 2, though) and being rather snappy. That said, Android 1.1 was, in some ways, a downgrade from my Motorola flip phone. Then, Android 1.5 came out and the phone got ludicrously slow. 1.6 sped it up a bit, but...well, if you've ever tried to run iOS 4.0 on an iPhone 3G, you'd know what it feels like. My usable phone turned into a slow hunk of plastic. The major difference is that Apple realized that they fucked up and made 4.2 rather speedy on the old platform while the G1 was perpetually stuck running 1.6.
I got around the speed issue by using a custom firmware and installing Android 2.1, then 2.2. Well, sort of. The phone sure is fast on the home screen, but the rest of it is a mixed bag. Here's the process that I have to go through when I try to reply to a text message:
1) Press a button to wake up the display.
2) Slide to unlock the screen.
3) Wait about 5 seconds for the home screen to draw (note: I only have two widgets active, neither of which hit the CPU or RAM very hard).
4) Press the Messaging icon.
5) Wait a few seconds for the screen to show feedback indicating that I hit the icon.
6) Wait about 10 more seconds to see a black screen come up.
7) Wait about 5 seconds for the messages to pop up.
8) Decide whether I want to try to use the shitty, unresponsive, and inaccurate on-screen keyboard or use the device keyboard, which will add about five seconds to the experience because it actually has to rotate the screen. Gasp.
At this point, the app is relatively responsive, but it took 15 goddamn seconds to get to that point. Oh, I almost forgot: 192MB of RAM is not enough for Android. Even though I manually went through and killed off a ton of services that I don't plan to use on the phone, Messaging sometimes manages to run out of memory on first launch and winds up getting force quit by Android, forcing me to have to reopen it and wait 15 more seconds before it becomes usable. 1.5/1.6 were both terrible in terms of launch speed, but at least Messaging wouldn't force quit on those versions.
When I had my iPhone 3G running iOS 4 (I must emphasise: 3.1.3 or 4.2.1. 4.0 and 4.1 are bad, m'kay?) it wasn't that damn slow. Here is the process that I take when I want to send a message on the iPhone (which is now running 3.1.3, but the experience is identical on all versions I've used on it):
1) Press the home or lock button to wake the screen up.
2) Slide to unlock.
3) Press "Messages" on the dock.
4) Wait about three seconds.
That is literally it. No long delays, no waiting for the damn SpringBoard to catch up, and no random force quits (well, technically I do get them in certain instances, but those are triggered and required by some jailbreakware that I have installed that adds some additional SMS functionality; without that being installed I've never had Messages force quit). It's how a smartphone should work. Hell, it's how a modern cell phone. It's how my "dumb" Motorola flip phone worked!
The terrible part about this is that my experiences aren't even limited to my handset. Technically, my phone isn't even supposed to run Android 2.2, but I have it running that anyway (more on that in a bit). However, I know an owner of the original Droid -- a handset that does support 2.2 -- that has the exact same issues with it that I'm having with my unsupported G1, even more in some cases.
That leads me to another major problem with Android: market fragmentation. Any phone that you wind up buying could have anywhere from a ~500MHz ARM11 or a 1GHz+ ARM Cortex-A8, anything from Android 1.6 (yes, they still sell Android 1.6 handsets) to 2.2, anything from 256MB of RAM to 1GB, literally any amount of internal storage, any screen resolution, a few have a physical keyboard, different GPUs, and not to mention various other manufacturer-specific quirks that can literally prevent well-behaved apps from running. It's J2ME all over again.
Developers not only have to deal with all of that crap, but they also have to deal with the mess that is the Android SDK. By and large, if an app is released for iOS, it will work nicely with future hardware platforms. If I run older iOS apps (as in designed for iOS 2, to be run on an iPhone 2G/3G) on my 4th gen iPod touch, the apps still work great, sometimes better than it does on the hardware that it was targeted for due to the increased RAM size and better CPU/GPU. With an Android app, you just have to cross your fingers and hope for the best. While things have certainly improved, it still gives off a vibe of everything just being thrown together. It's truly awful. About the only saving grace is that the Android platform was designed around a lot of variables, so the Android simulator can be configured to be just about anything. While that doesn't cover the aforementioned "manufacturer-specific quirks", it'll at least allow you to see how your program would look on all varieties of different hardware configurations.
Probably the worst and most predominant bit of market fragmentation is the actual version of Android. Every time there's a new version of Android, hundreds of comments in the Market say "I upgraded to X.Y and this app broke! Please update!" While that does certainly happen in Apple's walled garden, I noticed considerably fewer issues going from iOS 2 to iOS 3 and iOS 3 to iOS 4 than I have going from Android 1.5 to 1.6. Android breaks app compatibility regularly in what should be minor OS revisions, and in the entire time I've been watching the Android market (from 1.1 to present) it's never stopped being an issue.
The worst part about all of this is that if you have an older handset like mine, you tend to get stuck between a rock and a hard place. I could either stick with the supported 1.6, still have a fairly slow phone, and have a limited app selection, or I could stay with 2.2, have an even slower phone, and be able to use it for a lot more things. What's the solution here? I've only had the damned thing for a little over a year and I can't do shit with it! I'm not going to buy another piece of shit Android handset only to have the same bloody thing happen. I'm not completely stupid.
The worst part is that the iPhone 3G, which pre-dates the G1, is considerably more useful. It's based on the same platform as the original iPhone, with 3G capabilities added in, but it's still a dream to use! Just earlier I was browsing the web with Safari. I clicked on a YouTube link and it opened in the YouTube app, as expected. I pressed Done and it went right back to the web page. That's the way it fucking should be! Even with as dated as the processor in that sucker is, everything still handled smoothly. It took a bit more time to render the web pages than it would if I were to use my iPod, but it was still well within acceptable boundaries.
I've tried to do similar things on my Android device and I've found that actually getting back to what you were working on is a trying experience at best. You can hit the back button and, if you're lucky, it'll work. No guarantees, though. Sometimes the OS will force quit the browser from under you and you'll have to find your way back to where you were after waiting for the page to reload. It doesn't need to have a consistent or rational behavior because...well, because it's Android.
And seriously, that iPhone experience that I just related inspired me to write this rant. Honestly, when I do things like that with iOS it just feels very intuitive and natural. It really highlights just how much of a gigantic kludge Android is.
The saddest part is that I started out being very pro-Android and borderline dismissive of the iPhone. I loved the capabilities of the G1 when it was coming to the market. Now I love iOS and regret ever buying an Android handset. Funny how that works, isn't it?
I am seriously considering getting an iPhone if it moves to Verizon. If not, well, I guess I'll just go back to a flip phone for all of my personal calls/texts. I don't know how much longer I'm going to be able to tolerate my G1.