jueves, 8 de marzo de 2012

Desarrollo para dispositivos de bajo costo - Windows Phone SDK 7.1.1 Community Technology Preview (CTP)

Desde hace un tiempo venimos escuchando rumores sobre Windows Phone Tango, la versión de Windows Phone para teléfonos de bajo costo y de acuerdo a varios blogs de tecnología en el Mobile World Congress 2012, se dieron a conocer dispositivos con esta versión.

Hoy 7 de Marzo se ha publicado algunas instrucciones para la optimización de nuestras aplicaciones para dispositivos con 256 MB de RAM (Curiosamente no se usa nunca la palabra Tango, a diferencia de como se usaba bastante el codename Mango). Además desde el 26 de Febrero hay publicado en el sitio de descargas de Microsoft una actualización del SDK de Windows Phone el Windows Phone SDK 7.1.1 CPT o Community Technology Preview y su correspondiente post de referencia

Ten en cuenta que esta actualización no incluye una licencia para publicar aplicaciones que se compilen usándola, la licencia estará incluida en la próxima versión oficial del SDK.

Pues bien, como dicen en el Blog para Desarrolladores de Windows Phone, la introducción de dispositivos de menor costo y el apoyo a nuevos mercados trae consigo una oportunidad para alcanzar una nueva audiencia grande con sus aplicaciones de Windows Phone. La optimización de las aplicaciones para estos dispositivos de bajo costo es fundamental para garantizar que los usuarios obtener la mejor experiencia posible, sin importar el dispositivo, y para eso debemos empezar a conocer sobre las actualizaciones que se vienen.

Lo primero que debemos tener en cuenta que en la documentación de MSDN cuándo exista una advertencia especial sobre funcionalidades que aplican o no sobre dispositivos 256 MB de RAM veremos un ícono especial

Hay algunos puntos destacables en esta actualización, entre ellos que contaremos con una opción adicional al probar nuestras aplicaciones, podremos desplegarla como es típico en un dispositivo, y tendremos 2 tipos de emuladores uno que emula un dispositivo con 512 MB de RAM y otro que emula un dispositivo con 256 MB de RAM. El framework de XNA está totalmente soportado y se recomienda como siempre ver la documentación para mejorar el uso de la memoria en aplicaciones basadas en el mismo.

Algo bastante importante es que los agentes en segundo plano (Background Agents) no están soportados para estos dispositivos por lo que si intentamos usarlos recibiremos la excepción InvalidOperationException la cual deberíamos controlar de forma adecuada para que la aplicación no finalice abruptamente.

Una consideración adicional que debemos tener en cuenta refiere al uso de las animaciones, si bien estas se implementan para lograr generar esa sensación de movimiento y dinamismo de nuestras aplicaciones que propone Metro, es importante no excederse y considerar escenarios de este tipo en los cuales no existen muchos recursos disponibles.

El escenario de dispositivos con 256 MB de RAM nos llevan a necesitar identificar en nuestras aplicaciones si tenemos uno u otro tipo de dispositivo y deshabilitar las funciones de acuerdo con las restricciones. La recomendación es guardar un valor de configuración en nuestro almacenamiento aislado un valor que indique que el dispositivo tiene 256 MB, así:

 private static bool isLowMemDeviceValue;  
 public static bool IsLowMemDevice  
 {  
   get  
   {  
     if (IsolatedStorageSettings.ApplicationSettings.Contains("IsLowMemDevice"))  
       isLowMemDeviceValue = (bool)IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"];  
     return isLowMemDeviceValue;  
   }  
   
   set {  
     if (value != IsLowMemDevice)  
       IsolatedStorageSettings.ApplicationSettings["IsLowMemDevice"] = value;  
   }  
 }  

Para establecer este valor debemos evaluar la propiedad extendida ApplicationWorkingSetLimit, cuando el valor de esta sea 90 MB (94371840) o menos el dispositivo se catalogará como de baja memoria.

Este valor podemos establecerlo cuando se lance la aplicación y debemos recordar controlar los errores con un bloque try ... catch y controlar la excepción ArgumentOutOfRangeException debido que el dispositivo puede no haber sido actualizado a la última versión.

 private void Application_Launching(object sender, LaunchingEventArgs e)  
 {  
   try  
   {  
       
     // Check the working set limit and set the IsLowMemDevice flag accordingly.  
     Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");  
     if (result < 94371840L)  
       MainPage.IsLowMemDevice = true;  
     else  
       MainPage.IsLowMemDevice = false;  
   }  
   catch (ArgumentOutOfRangeException)  
   {  
     // Windows Phone OS update not installed, which indicates a 512-MB device.   
     MainPage.IsLowMemDevice = false;  
   }  
   
 }  

Si deseamos prevenir que nuestra aplicación se ejecute sobre dispositivos de 256 MB podemos hacerlo estableciendo en el Manifiesto de nuestra aplicación una zona de requerimientos inmediatable después de la zona de capacidades, así:



Esto es apenas preliminar, pero si queremos que nuestras aplicaciones tengan cobertura en este tipo de dispositivos debemos tener en cuenta los cambios en nuestro mapa de ruta, el detalle lo pueden encontrar en MSDN.

Hasta la próxima 

Sorey

No hay comentarios: