> For the complete documentation index, see [llms.txt](https://elguerre.gitbook.io/de0an/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elguerre.gitbook.io/de0an/capitulo-04-la-construccion.-los-cimientos/el-emulador.md).

# El Emulador

Como hemos podido comprobar, tal y como veíamos en el capítulo uno, uno de los requisitos recomendados es el emulador. Va a facilitarnos el desarrollo y la depuración sin la necesidad de un dispositivo físico. Se trata de una herramienta indispensable de cara a ser ágiles y productivos.

Existen numerosos emuladores para distintas capacidades y resoluciones y para distintas actualizaciones o versiones del SDK, lo que va a permitirnos probar nuestra aplicación en todos ellos verificando comportamientos distintos, incluso antes, de desplegarlos e instalarlos en dispositivos físicos. Ganaremos, por tanto, en tiempo además de en calidad.

Gracias al emulador, también vamos a poder definir y ejecutar nuestras pruebas de IU de manera automática como ya veremos en capítulos sucesivos.

## Emulador de Windows Móvil

El emulador de **Windows Móvil o de teléfono**, tiene un menú lateral derecho compuesto por un conjunto de acciones que reproducen el comportamiento de un teléfono en nuestras manos.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-ca623c65f50ec01235a52368a9e2aabdb33078ca%2Fimage11.png?alt=media)

**Figura 11.- Emulador de teléfono versión10.0.14393.0 729p de 5” con 1GB de RAM**

Estas acciones son las siguientes:

* Cerrar y minimizar, simular entrada táctil de punto único o multipunto (*simple touch o multi-touch*), girar, ajustar el emulador al monitor, minimizar y maximizar su tamaño, ayuda y herramientas adicionales.
* Botones de hardware simulados. Se encuentran en el lateral derecho del emulador y son 4: Subir y bajar volumen, inicio/apagado y el botón cámara.

El emulador admite también la interacción con teclado hardware del PC en el que estamos desarrollando.

La siguiente tabla muestra las teclas de un teclado hardware disponible para emular botones y controles desde el PC:

**Tabla 2.- Teclas de un teclado hardware para emular botones y controles**

| Tecla     | Botón / Acción                                                                  |
| --------- | ------------------------------------------------------------------------------- |
| Win + Esc | Atrás. Con pulsación prolongada, se muestran las aplicaciones en segundo plano. |
| Win + F2  | Inicio                                                                          |
| Win + F3  | Buscar                                                                          |
| Win + F4  | No disponible.                                                                  |
| Win + F5  | No disponible.                                                                  |
| Win + F6  | Cámara. Emula el botón, presionado hasta la mitad para emular el autoenfoque.   |
| Win + F7  | Cámara.                                                                         |
| Win + F8  | No disponible.                                                                  |
| Win + F9  | Subir volumen                                                                   |
| Win + F10 | Bajar volumen                                                                   |
| Win + F11 | No disponible.                                                                  |
| Win + F12 | Apagar/Encender la pantalla. Con pulsación prolongada, apagar el emulador.      |
| RE PÁG    | Teclado arriba. Activa el teclado hardware.                                     |
| AV PÁG    | Teclado abajo. Desactiva el teclado hardware.                                   |

El emulador posee otras herramientas adicionales que ofrecen un sistema casi completo de pruebas para las aplicaciones.

**Tabla 3.- Herramientas adicionales del emulador**

| Herramienta                                                                                                                                                                                                                                                                                           | Descripción                                                                                                                                                                                                                                                                                                                                                           |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-1b88477ee030a4feb2b7d074784e5a65dda85934%2Fimage12.png?alt=media)                                                                                                 | Acelerómetro. Prueba aplicaciones que utilizan el sensor de movimiento del teléfono.                                                                                                                                                                                                                                                                                  |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-fea94df8faa37a053d2d1e0469f07575e7a45054%2Fimage13.png?alt=media)                                                                                                 | <p>Puntos de control personalizados (o <em>Checkpoints</em>). Permite configurar y personalizar el emulador e incluso almacenar datos de configuración realizados en el emulador.</p><p>Un punto de control guardará el estado actual del emulador.</p>                                                                                                               |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-4e9fc53ff6ee3a0e66f367d8f807027809e69917%2Fimage14.png?alt=media)                                                                                                 | Localización. Prueba aplicaciones que utilizan navegación, geolocalización o geo-valla (*geofence*[<sup>1</sup>](#fn1)*)*. Muy útil para simular navegaciones en coche, en bicicleta o andando. También puede ayudarnos a configurar parámetros al trabajar con *geofence*: Detención, tiempo de permanencia, tamaño, etc. Presenta diferentes perfiles de precisión. |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-2779c6884dcdcae4836994f9e9e69c7f621bd056%2Fimage15.png?alt=media)                                                                                                 | Capturas de pantalla (o *Screenshot*).                                                                                                                                                                                                                                                                                                                                |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-27fae9b9646389be6105d24e41f67a95cfd256e9%2Fimage16.png?alt=media)                                                                                                 | Red. Prueba la aplicación con distintas velocidades de red (*Network speed*) y distintas intensidades de señal (*signal strength*).                                                                                                                                                                                                                                   |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-344e298d570aa9fb1f7db6d8564f9bf735f62fa5%2Fimage17.png?alt=media)                                                                                                 | Tarjeta SD. Prueba la aplicación con una tarjeta SD extraíble simulada utilizando una ruta física del PC de desarrollo.                                                                                                                                                                                                                                               |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-351b25f9ce88cd3815a77380bfccf387930307f3%2Fimage18.png?alt=media)                                                                                                 | Notificaciones. Prueba el envío de notificaciones por inserción sin la necesidad de crear un servicio en la nube (*Azure*[<sup>2</sup>](#fn2)) para ello.                                                                                                                                                                                                             |
| ![C:\Users\juanlu\AppData\Local\Microsoft\Windows\INetCacheContent.Word\Configuración Opcional.png](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-0a6313583f82b1df24bff80922c77b6e5c4b606d%2Fimage19.png?alt=media) | Configuración opcional o Sensores. Permite simular el funcionamiento de la aplicación en teléfonos que incluso no dispongan de todas las características de cámara o sensores opcionales. Así, si nuestro teléfono es de bajo coste y no tenemos estos sensores, podremos probarlos igualmente y llegar con nuestra aplicación a un mercado más amplio.               |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-5ecfb267d8100645745d5049eae7a42ea6903b13%2Fimage20.png?alt=media)                                                                                                 | Actividad o línea de tiempo de actividad. Permite añadir actividades/acciones para simular comportamientos durante ciertos periodos de tiempo indicados en segundos.                                                                                                                                                                                                  |
| ![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-e1fa0111f54884fbe1f7fa8e5f993eb0e9ee99ba%2Fimage21.png?alt=media)                                                                                                 | NFC. Modo de proximidad. Permite realizar pruebas entre dos emuladores distintos.                                                                                                                                                                                                                                                                                     |

***

1. Geo-valla (o *geofence*). Es un perímetro virtual de un área geográfica del mundo real.[↩︎](#fnref1)
2. Azure. Plataforma como servicio alojada en los *Data Centers* de Microsoft.[↩︎](#fnref2)

Otras herramientas no menos importantes, son los denominados **contadores de velocidad de fotogramas.** A través de los cuales, vamos a poder monitorizar la aplicación para conocer su rendimiento (*performance*), animaciones e incluso efectos de pintado. En la siguiente imagen podemos ver estos contadores.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-656960105365523d62a661e6acb1147bb94f737c%2Fimage22.png?alt=media)

**Figura 12.- Contadores de velocidad de fotogramas**

Se detallan a continuación:

* App FPS. Velocidad de actualización de la pantalla (IU de la aplicación), en fotogramas por segundo (FPS).
* APP CPU. Uso de CPU por fotograma (utilizado en la actualización del IU de la aplicación), en milisegundos.
* Sys FPS. Velocidad de actualización de todo el sistema, en fotogramas por segundo.
* Sys CPU. Uso total de CPU por fotograma en milisegundos. Utilizado en la actualización de todo el sistema.

Aunque, puede parecer complicado entender estos contadores, lo que realmente nos interesa es conocer sus umbrales.

**Tabla 4.- Umbrales de los contadores de velocidad de fotogramas**

| Contador | Límite crítico (rojo) | Valor recomendado |
| -------- | --------------------- | ----------------- |
| App FPS  | < 30                  | 60 FPS            |
| App CPU  | < 15                  | 20 FPS            |
| Sys FPS  | < 30                  | 60 FPS            |
| Sys CPU  | < 15                  | 20 FPS            |

El lugar idóneo en el código donde situar la activación de estos contadores, puede ser en el constructor (*App()*), o en la primera línea del evento *OnLaunch* de la clase *App.xaml.cs*.

```csharp
#if DEBUG
    if (System.Diagnostics.Debugger.IsAttached)
{
    Application.Current.Host.Settings.EnableFrameRateCounter = true;
}
#endif
```

Existen, además, otras propiedades de depuración. Para ello visitar la página: <https://msdn.microsoft.com/es-es/library/windows/apps/xaml/hh701818(v=win.10).aspx?appid=dev14idef1>

A pesar de que el emulador va a ser nuestro mejor aliado durante el desarrollo, tiene algunas limitaciones. Existen características, que tendremos que probar directamente en nuestro teléfono:

* Brújula
* Giroscopio
* Controlador de vibración
* Brillo. El nivel de brillo del emulador siempre es Alto.
* Vídeo de alta resolución. Los vídeos con una resolución superior a la resolución VGA (640 x 480) no se reproducen de forma fiable, sobre todo en emuladores con solo 512 MB de memoria.

Podemos seguir profundizando visitando la página: <https://msdn.microsoft.com/windows/uwp/debug-test-perf/test-with-the-emulator>

## Simulador Windows

Para Windows, en lugar de un emulador contamos con un simulador, que, aunque puede parecer lo mismo, la diferencia radica en que un emulador imita el comportamiento de un dispositivo físico procurando aportar ventajas, mientras que el simulador finge su comportamiento.

Este simulador no es una máquina virtual en *Hyper-V* y por tanto no precisa de todos requisitos mínimos de los que ya especificamos en el capítulo uno.

![](https://240651724-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfrvHBNivOTy0fVKROgzo%2Fuploads%2Fgit-blob-bbe2fe6970981d118896f0ebd37dfc878f27f65a%2Fimage23.png?alt=media)

**Figura 13.- Simulador de Windows**

Cuenta con las siguientes acciones:

* Minimizar y anclar el simulador para que permanezca siempre visible, simular entradas de ratón, habilitar el modo táctil para un dedo y para dos (para acercar y alejar y para rotación de objetos), cambiar la orientación del dispositivo, la resolución, hacer capturas de pantalla, cambiar las propiedades de red y ayuda.
* Botón hardware simulado, o botón de Windows situado abajo y en el centro del dispositivo, que muestra el menú de inicio.

Para más detalle, visitar la página: <https://msdn.microsoft.com/library/windows/apps/hh441475.aspx>.
