Comparative Technical Review of Windows Phone 7.5
I have got a used HTC Radar 4G (“Radar”) from eBay this Monday for $250 (+ shipping). This is my first Windows Phone purchase. Before this, I have used SonyEricsson Xperia X10 (2.1), Samsung Captivate (2.3), Google Nexus S (4.0), and LG G2x (2.3) over the last 15 months. I have bought Radar because I really got sick of G2x and Android problems and I wanted a breath of fresh air. I have spent months trying to hack my phone for better but it was overall a really frustrating experience (Originally, I did not get an iPhone because I have an excellent (real) unlimited plan on Wind Mobile and I did not want to switch carrier. Apple probably got this right a long time ago).
I mainly decided to write this review this because I am overall very impressed with the platform and I want more people to know about this. Also, I was also absolutely fed up with Android’s problems over 4 phones. I will try my best to be informative in this review, choose words carefully, point out important pros and cons of this phone and platform. I have some programming knowledge and somewhat minimal knowledge in embedded programming. A large part of it will be comparative to Android because that’s what I know the best (as a former “power” Android user). Also I have never used pre-Windows Phone 7.5 so I can’t comment on that.
Here’s how the phone looks like (sorry the camera on G2x is an absolute garbage):
The Good Parts
Battery Life is probably the number one thing I am impressed with Radar. It shows a superb real-life battery life compared to any Android phones I have used. It will last all day with push email and messaging enabled, and listening to music for hours. There are a few things where I think Windows Phone is doing radically better than Android.
Playing Music in the background does not kill your battery
I like the fact that use Radar as a music player all day without draining all the battery. This was not possible with any other phones I have used previously. Radar typically lasts the entire workday or more with moderate usage, push emails, and push messages.
What's wrong with Android Power Management?
In my opinion, one of the biggest mess in Android right now is the existence of the Wakelock. The wakelock has caused quite a scene in Linux kernel development before. The wakelock is a simple power management mechanism where obtaining the lock would prevent the phone from going to lower power state as long as the lock is held. In my opinion, the wakelock is rightfully one of the worst ideas in Android now that gives Android a lot of bad names with regards to battery life. There are a couple reasons why this is a bad idea.
First, locks (whether it is a mutex for concurrent programming or a means of resource management) are a bad abstraction to use in general. It surely is simple; but there is no good recovery mechanism built-in in case somebody fails to release the lock properly unlike other primitives. In the context of power management, when a program fails to release the wakelock by mistake, it means that the program will silently consume all of your battery in less than 8~10 hours. For normal users, it is incredibly hard for them to find out where the battery problem even comes from. But even if you find it, what if the problem lies in one of Android’s core app?Dialer? You are really screwed up. The fact that this happens in a Android core app shows the difficulty of getting this right. That any other developer can cause such problem is even scarier.
Second, the current Android wakelock programming pattern makes it very hard to make an energy efficient program, including energy-efficient music players. Before explaining this, I want to point out an important fact: when you see a smooth continuous animation or hear music, the processor needs not to run continuously. Here’s why:
Generally, our visual system perceives a series of images as a smooth continuous motion if the images are replaced more than 60 times (often, we use the term frames per second to denote this frequency). This means, we only need to draw the cellphone screen every 0.016 seconds (16ms) to show a smooth animation. This might sound like a short time but this is a long time for computers. If you have a 1Ghz processor, you can run 16 million CPU cycles in that time and that’s relatively a lot. Now, suppose scrolling your web browser window takes 10% of the CPU power. In this case, your CPU works for 1.6ms and does nothing for the next 14.4ms every 16ms (This is obviously a super-simplified version of what happens but my point is still valid). With most modern ARM processors, we can put the CPU to deep sleep for that idle period. Similar principle applies to music playback.
On Android, all music players keep the CPU alive 100% of the time while the music is played. That’s including when your phone is in your pocket with the screen off. I am not making this up! Initially, I discovered this by inspecting the CPU sleep time from Spare Parts app. And, I confirmed my suspicion by reading the source code of MediaPlayer. That’s more than 90% CPU time and battery wasted for nothing.
Now, how do I know that WP does not use an equally bad mechanism? There are a few reasons. First, it’s just impossible for the CPU to be running for 24 hours on one battery charge. Second, you can never run a continuous long running task yourself on WP (see the section Strict Background Management). Lastly, if Microsoft used a similar “wakelock” mechanism internally to play music, it’s very unlikely that Microsoft managed to not screw up (sorry Microsoft).
Battery Saving Mode
I like that WP has a battery saving mode by default. This is different from disabling auto-sync on Android for a few reasons. First, WP battery saving mode will prevent any background tasks from running when you want to save battery. I can be confident on how long the phone will be alive. There is nothing that enforces a poorly programmed app from running in the background when auto-sync is disabled in Android. Second, it has sensible defaults. It will automatically turn on when the battery is less than 20%.
WP feels very smooth. Try scrolling down fast on a WP. You may see partially rendered item but you won’t see any of the “jerks.” Also if you are trained to see the difference, WP runs the animations at a much higher frame rate than Android. If anything, it tells the non-programmers that software matters a lot more than the hardware (since my G2x had a dual-core and still was jerky). There’s nothing much more technical I can say about this. Those jerky movements in drove me crazy on Android. It happened when I type, start scrolling in the browser, or sometimes just randomly.
It also kind of changed my perception of managed languages running on mobile environment considering how WP7 apps are mostly Silverlight apps.
Strict Background Task Management
WP's Background Task Model
This connects strongly back the battery life and to some degree, to the perceived smoothness. WP dictates what can run when I am not using the phone and I can be assured that a rogue app won’t drain all of my battery using GPS in my pocket warming up my leg. If you want to know the full detail, you can check the document explaining WP Background Agents.
On WP, there are two kinds of background tasks: PeriodicTask and ResourceIntensiveTask.
Among a lot of rules, my favourite part is that WP schedules the tasks together so that the phone does not wake up more often than it’s needed. For example, suppose you have two tasks that run every 30 min. Surprisingly, this can result in the phone waking up to 4 times in an hour. This happens when the first task wakes up at (0, 30) minute and the other task wakes up at (15, 45) minute. With n apps synchronizing every 30 minutes, this can blow up to 2n wake ups. Presumably, this has a pretty bad impact on battery life. WP will push them altogether. On Android, as far as I know, there’s no obvious way in the API to achieve this (from what I have studied). You can tack on to Google Apps synchronization but that’s kind of hacky. Also, these tasks cannot run more than 25 seconds, which is a good way to police battery draining applications. This is why I can safely add many Live Tiles on my home screen without worrying out accidentally destroying my battery.
ResourceIntensiveTasks can run up to 10 minutes. There are meant to synchronize a big chunk of data or do other long-running tasks. They have even more strict activation rule: power plugged-in, minimum 90% battery charge, user not using the phone and more. This ensures that you won’t ever experience stuttering from the massive background synchronization.
Other than that, WP does not allow any non-system tasks to run at the same time other than one foreground tasks. An important difference from the Android way is that when you switch task, WP will suspend the entire foreground process and won’t grant any CPU cycles until it’s tombstoned or running again (refer to WP application lifecycle overview).
This goes back to the smoothness part, here’s a really good example. Go to Market (er, Play) and try updating the apps. I have never seen an Android phone that will not make your UI significantly stutter/hang (Well, I don’t know about those quad-core phones but certainly my dual-core phone stutters big time). Radar does not do that.
Of course, one might find this model extremely restrictive. But as a user, I like this model a lot more predictable and reliable with respect to responsiveness and battery life (and It Works for Me!™).
Zune is a really nice music player. It is beautiful, simple to use and still fast. It provides a good (music, ratings and others) two-way synchronization with your Windows PC through Zune software. Zune Pass is a pretty good deal, too. Unlike Google Music, I can see the current playlist (well, I am sure they will add it back, right Google?). Integration with other media player is something really nice to see, as well.
I really like the automatic synchronization scheme I am using now: I have a playlist of songs that I always want my phone, a list of 100 shuffled favourite songs and a list of 50 shuffled unrated songs. Then I just synchronize those three lists with the phone. This way, whenever, I connect the phone, I get shuffled new music. 4GB is a plenty space to do something like this and enjoy different music every day.
Also, the wireless synchronization over WLAN is really cool, albeit terribly implemented. This is much better than using up my expensive and slow (that’s right, I am in Canada) Internet connection. The downside is that there is no way to start the wireless synchronization forcibly and when things go wrong, you have to try to debug uPNP issues. It’s not fun.
I like that the phone comes with a camera button. It’s a two-stage shutter button so I can focus and shoot easily. X10 had this, and quite frankly I missed it a lot.
Also, it’s really easy to activate the camera even compared to ICS. Just holding the camera button will do. On ICS devices, you have to turn on the screen first to touch the lockscreen.
You can talk to your friend through SMS, Facebook, or MSN using the built-in messenger app. I think it’s cool but I think Palm fans like this a lot more than I do. Unfortunately, gTalk does not work with this. Hopefully Microsoft adds a generic XMPP support in the next version.
Messaging app screenshots
SonyEricsson tried something similar with Timescape before… except theirs was terribly executed. It was sluggish, took more than a second to peek through each item in the entry. Nice try though, Sony.
People Hub shows the updates from Twitter, Facebook, LinkedIn and other social networks in one place.
You can also aggregate the information by person (Sony tried this too, but it was terribly slow to use). Clearly, this is an ultimate stalking tool.
You can sync the contacts with Hotmail, Exchange, Google (yes, it fetches contact pictures), Facebook, Twitter and others. Also, WP lets me choose one of many profile pictures of a contact. This really bugged hell out of me on Android when I suddenly started seeing the Twitter eggs instead of people’s face on my phone.
Application Bar Menu
I prefer WP’s Application Bar over ICS’ Action Bar. They both carry out a similar role. But I like Application Bar better because it tells me what the icons mean when I expand it (It’s funny because Application Bar actually predates Action Bar).
Application bar, and its expansion:
Find My Phone
HTC’s Attentive Phone Feature
I usually don’t like the additions that OEMs make but this one is an exception. It’s a nice attention to detail. (On the other hand, HTC Sense App looks absolutely out of place… I just uninstalled it. Yes, you can uninstall them).
Office (Word, Powerpoint, Excel and Onenote)
Apps on the market are really polished and follows the platform guideline much better.
I really like the app trial system of the Marketplace. Not only i get to try the apps (doh), there’s a lot less ugly lite/premium version cluttering in the market. I heard this is a pretty new feature.
This is probably something I hate the most about LG G2x and the fact that they are getting away with the problem with no publicity.
G2x, every day, shuts off randomly and will never turn on again until you pull out the batteries, going into what’s referred to as “sleep of death.” This is incredibly problematic because I will miss the alarm, calls, emails, and other stuff. It’s just plain infuriating. No custom ROMs really fixed it. What I have heard from my friends who have worked with Tegra 2 is that it’s really easy to get Tegra 2 into a sleep state where no interrupt will wake up the phone. I will totally buy that. The phone also reboots randomly. I will never buy any LG phone again in my life.
The GPS on G2x almost never worked, either. It only locks after like 10 minutes. I have tried all the voodoo magic suggested by xda hackers but they didn’t work for me. These problems are well-known and supposedly resulted in a lawsuit but I have never heard of any progress on this.
Radar is extremely stable, and it never crashed on me. This is good. If someone had a heart attack next to me, the last thing I want is my phone crashing or freezing (this isn’t that uncommon).
Since the WP does not have a replacement keyboard, I expected very high of the keyboard and it delivered. Two things: First, the keyboard just works. It is much better than SwiftKey in a way that pressing shift key doesn’t always correct what you type. It takes your typing speed and other factors into account. Correcting a misspelled word is very easy, too.
Second, the default keyboard provides first-class supports to non-Latin languages by default. For example, it was easy and fast to switch between English and Korean. Both languages are supported fully in terms of the prediction quality.
My experience with using two keyboards in Android wasn’t that bad but it wasn’t as good. First, the good English keyboards either lacked Korean entirely or had no prediction ability. Similarly, all the Korean input methods had pretty much abysmal English prediction ability. Second, while ICS made input method changing easier, all of the input methods took a few seconds to initialize and popup. I entirely gave up mixing two languages in a text because switching input methods made such a big interruption in my texting process.
Anyone who has tried running Android emulator knows how much it sucks. WP7 emulator is better. But frankly, I think anything is better than the Android emulator.
It’s not Java. I get to program in C#, F# (yea I am a f# fanboy) and make cheesy animations with Silverlight.
Looks nice and informative
Lastly, I find WP quite clean, nice and informative. Especially, it was new to see something that’s not just a grid of things on the home (“start”) screen. WP theme has a concept of an “accent” colour which is a nice touch (but you can only choose between 11 of them, which sucks a bit, but even CM only gave me 3 choices).
HTC Theme and Mango Theme colours:
Some of the other live tiles (Baconit and Carbon) and pinned bookmarks (Hackernews and Google Reader):
The Bad Parts
Opaque Storage Management
I wasn’t very sure where to put this but I decided to make it a con. That is because I was quite sick of Android apps littering files all over my sdcard and I was hoping maybe a complete storage management by the OS is a good thing. But WP 7.5 fails to do it nicely. For instance, there is exactly zero app that tells me how much space is used by each app. This makes it quite hard to find out which apps are using my space when I need it. Games usually a lot of space but… I don’t want to have to use the trial-and-error method to find it out.
The lack of UMS option might bother a number of people as well. While I have eventually moved to the “managed” synchronizing music players, a lot of people still prefer organizing their music and pictures directly on their own.
Lack of GApps support
It’s probably Google’s business decision but it sucks to have near-zero Google apps support. Specifically irreplaceable is Google Maps. Don’t get me wrong, Bing Maps is nice. But the transit support is almost nonexistent in Canada. I can get away with things like NextBus.com in big cities like Toronto but in small cities like Waterloo, it’s nice to be able to schedule ahead.
Gmail synchronization is good, but it’s missing Gmail specific features so if you make use of them, you won’t be very happy (The web version still works).
Lack of Some Popular Apps
There are a lot of popular apps on WP that functions perfectly fine (this may be because I started using WP years after the initial launch) but that’s not good enough. I am missing apps like Mint, my banking app. They are not a deal breaker since I can use the mobile web version but the difference between the native apps and web apps on WP is huge. That’s not because the browser sucks but because the native experience of WP is delivering more than other platforms.
Fortunately, it seems like Microsoft is acknowledging this according to this leak. According to the leak, they are planning to catch up the TOP25 apps in other platforms by the end of H2 FY12. I think they started doing a good job of doing this, by running hackathons and investing a lot of money. I know the app numbers aren’t everything and the trends look okay but it needs to be better.
Android notification area is definitely better than the WP toast notifications. WP toasts don’t stack. You can only click them to go to the app, or dismiss by swiping. Once it’s dismissed, you can’t find it. It’s not that the end of the world since you can see the Live Tiles on the start screen but coming from Android, this is a nuisance.
This is kind of annoying as I still have the habit of running random programs that are not from the Market. If you are a student, you get to sideload 3 apps. If you are a registered developer ($99/year) or buy one of those unlock tokens ($10), then you get to load 10 apps. This is not really an issue if you just develop apps on your phone, but if you run homebrew apps (like screenshot apps) then this 3 apps limit might be a little bit limiting.
Can’t replace Bing as a search provider
Bing is not bad but I want my choice. The only reason I can think of them not allowing this is because the native search app can’t organize the Google search result the way they want.
This is how Bing presents the search result:
Hardware Search button not flexible
No matter where you are, the search button will take you to the Bing search screen. To search in the current context, you have to use the magnifier icon in the application bar.
Some Task Contracts makes no sense to me
Maybe this is one of my Android bias but in my opinion, launching dormant (suspended) apps from the start screen counts as a new application launch. And Microsoft says your application should lose the transient data. It looks inconsistent to me that an app preserves the state when you approach it from the task switcher but not from the start screen. Funnily, Microsoft’s own Messaging app violates this. If you start the Messaging app from the start screen when a new message arrived, the messaging app will take me to that the thread the new message belongs to, not the home screen of the messaging. Execution Model Overview document provides a very good summary of how these things work. I think Microsoft should make a change to make things consistent.
8GB of space is too small
I used my G2x with a 32GB microsd attached. On the other hand, Radar comes with meagre 6GB of actual usable space when formatted, and about 5GB after app installations and synchronization. Considering how this is a relatively low-end phone, I can’t complain too much, but it could have been better.
Despite some of the shortcomings, I like WP7.5 because of the sensible defaults that don’t make me stressed. It’s as if the people who made the phone tried using the phone! (oh, my). The user interface is delightful to use. I don’t think I will go back to Android for a while.
I feel like some of the open options Android provide to developers are a bit misguided. Microsoft made this exact same mistake more than ten years ago. The result was that Windows is now forever mocked for its BSOD (even if it originated from non-Microsoft drivers) and sluggishness regardless of how the platform is doing now.
WP7.5 deserves way more attention than it does. Hopefully, Microsoft succeeds to convince people this year with new cool phones like Lumia 900.