Several people have asked whether we would be producing a version of SpeedCoach Mobile for Android, the mobile phone operating system developed (mostly) by Google. This would bring the application to many new devices and provide access for rowers and paddlers who aren’t on AT&T’s wireless network. So naturally, we were very interested in pursuing this.
Recently, I’ve had the opportunity to do some consulting work on Android. One of the reasons I took on this work was to get the experience necessary to port my iPhone applications to Android (and get paid at the same time!). I’ve learned a lot about Android over the last couple of months and I can now tell you, unfortunately, that Android is not well suited for SpeedCoach Mobile or other applications like it. There are several reasons for this, which I’ll explain briefly:
- Performance: The Java virtual machine that Android runs is roughly 10-20 times slower than most existing Java-enabled phones. SpeedCoach Mobile requires a fair amount of processing power to process accelerometer & GPS data in real time, so Android’s performance problems are a huge liability.
- Garbage Collection: Java applications periodically use a technique called “garbage collection” to reclaim memory that is no longer being used. When garbage collection occurs, the running application is briefly suspended. For many applications this isn’t a problem, but for applications that need to process data in real time, garbage collection can lead to annoying pauses and unexplained data glitches. (The iPhone doesn’t use garbage collection.)
- Multi-tasking: One of the things that many users (and developers) like about Android is the ability to run multiple applications at the same time. A social networking application can run in the background and send location updates to your friends, for example. Even though the application isn’t interacting with you, it can still perform useful work on your behalf. However, multi-tasking can cause performance problems for applications like SpeedCoach Mobile because these background applications consume processing power (and battery power!). As a developer, it makes it impossible to guarantee that the application will run well on any particular device – it all depends on what else the user is running on their phone (which they may not even be aware of, by the way). (The iPhone and iPod touch don’t support multi-tasking.)
- Device fragmentation: The last of the major problems with Android has to do with the number of different devices on which it runs. This is a problem that all Android developers are facing. As the number of devices grows, it becomes difficult for small developers to test their applications on all of the devices where customers might ultimately run them. Differences in screen size, memory size, processor speed, available sensors, and so on can all lead to variations in behavior from one device to another. Writing applications in a way that makes them immune to these differences is possible, but this adds complexity and cost. (The iPhone 3G, 3GS, and the iPod touch have far fewer differences between them.)
For all of these reasons and more, I’ve been led (sadly) to conclude that Android just isn’t a viable platform for SpeedCoach Mobile or StrokeCoach Mobile.