Search code examples
javaandroidgoogle-tv

Google TV - is designing for efficiency as important as it is with handsets/tablets?


First of all, I am not asking "is it OK if I totally forget about efficiency when writing an application for a Google TV". I would never do that! :)

But I'm still curious: what are the differences between developing something for a Google TV and a mobile device such as a tablet/handset? I have found a lot of information online about the differences in user interface design (i.e. TV is meant to be more social, no screen orientations, no touchscreen, etc.) but none of the documentation describes the hardware-specific differences between the two devices. To be more specific,

  1. Considering that Android was originally designed for mobile devices with limited memory, is designing an application for a Google TV any different?

  2. Phones and tablets don't have the luxury of swap space and therefore there are hard limits on memory... is this also the case with a Google TV?

  3. The Dalvik VM is optimized for minimal memory footprint on handsets/tablets... is Google TV powered by the exact same VM, a slightly different version designed specifically for the Google TV (but with the same design goals in mind), or a completely different VM (with different design goals in mind)?

  4. What are the actual differences in hardware when comparing a handset/tablet and a Google TV? Are these differences significant?

  5. Does Ice Cream Sandwich and Jelly Bean improve performance in any way (i.e. does it make use of these new hardware capabilities?)


Solution

  • Considering that Android was originally designed for mobile devices with limited memory, is designing an application for a Google TV any different?

    Fundamentally, no. These devices can exist in their form because they are using a mobile OS and so can run on less expensive hardware. The CPU may be around the performance of current mid-level phones; as far as I can tell the GPU is much lower performance (especially given the screen resolution it is driving) then currently typical on phones.

    Also, the next generation Google TV devices that have been announced are ARM-based, so expect them to be much more similar in performance.

    Phones and tablets don't have the luxury of swap space and therefore there are hard limits on memory... is this also the case with a Google TV?

    Yes, this is how Android is designed to operate. I don't know off-hand how much RAM is in the current GoogleTV devices, but I doubt it is more than what you are seeing on current Android tablets (1 GB). As always you can use ActivityManager.getMemoryClass() and ActivityManager.getLargeMemoryClass() to find out the memory situation of the device you are running on.

    The Dalvik VM is optimized for minimal memory footprint on handsets/tablets... is Google TV powered by the exact same VM, a slightly different version designed specifically for the Google TV (but with the same design goals in mind), or a completely different VM (with different design goals in mind)?

    It's the exact same VM, just running on x86.

    What are the actual differences in hardware when comparing a handset/tablet and a Google TV? Are these differences significant?

    There are a number of obvious things:

    • Input is primarily through DPAD interaction, so you want to implement your app so that interaction with the DPAD works well. Android has always supported fairly complete interaction with the DPAD, so this is not really anything new, just a part of application design that current mobile-oriented developers often let slide. (However it is good to support the DPAD correctly for more than just GTV, it is also important for things like the Asus Transformer when the user is interacting with a keyboard.)

    • There are no sensors like an accelerometer, etc. You can use the platform APIs like PackageManager.hasSystemFeature() to find out whether a hardware feature exists, or declare the requirement for the feature in your manifest so the app is not available on such devices.

    • These devices can't rotate, so you will need to work in a landscape screen.

    Of course the screen you will be running on is larger than a typical phone screen, but with Android's support for tablets you have a lot of tools (such as fragments) available to adjust to take advantage of the screen. Especially now that you can assume that these devices are running 3.x or later, all of the infrastructure introduced in the platform for tablets is available.

    There is also a lengthy document on UI design for GoogleTV at https://developers.google.com/tv/android/docs/gtv_android_patterns that has a lot of good material on how to think about your UI on a TV. There are many specifics on the UI design of GoogleTV; I would suggest you pay a lot of attention to the overall points (the space available for UI is not that much more than a phone, don't design your UI around mouse-like interaction, etc) and then decide what makes sense for you how much you are just going to present your phone/tablet UI on the TV vs. doing something more customized to follow the GoogleTV guidelines. As long as you follow the basics with a UI that works well with DPAD navigation and such, I think you will be good.