Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de...
Transcript of Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de...
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
© 2012-13 Depto. Ciencia de la Computación e IA
Servicios iOS
Sesión 3: Background e hilos
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Índice de contenidos• Gestión de hilos• ¿Qué son y para qué sirven?• Implementación en iOS
• Ejecución en background• ¿Qué es y para qué sirve?• Estados de ejecución en iOS• Ejecución en background: Procesos permitidos• Ejecución en background: Otros procesos• Implementación en iOS
• Notificaciones locales• ¿Qué son y para qué sirven?• Diferencias con notificaciones push• Implementación en iOS
2
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Gestión de hilos• Gestión de hilos• ¿Qué son y para qué sirven?• Implementación en iOS
3
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos• Hilo: tarea que se ejecuta de forma independiente a la tarea
principal.• Ejecución concurrente, multitarea -> varios hilos trabajando al
mismo tiempo.• Usado habitualmente en todo tipo de programas / aplicaciones:
Ej: el propio sistema iOS.
• Objetivo: realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia de uso.
4
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos• Consideraciones:• Todos los hilos comparten un mismo sistema de ficheros -> evitar
el acceso simultáneo a las mismas estructuras de datos.
• Gestionar excepciones o errores de los hilos.
• Cerrar los hilos de forma “limpia” cuando estos se dejen de usar.
• Controlar los diferentes estados de la aplicación:Cuando se cierra o entra en segundo plano.
• Gestión e implementación muy compleja a bajo nivelAlternativa: desarrollar a alto nivel -> iOS SDK
5
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos: ejemplos de uso• Realizar una petición a un servicio web de forma asíncrona:• Descarga de ficheros de un servidor.• Descarga de datos...
• Ejecución de ciertos algoritmos que requieren de un tiempo para que terminen:• Algoritmos de IA: cálculo del camino más corto.
• Ejecución de tareas relacionadas con la edición de imágenes, ficheros, etc...
6
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos: implementación (1)• Bajo nivel: clase NSThread.
• Alto nivel: clases NSOperationQueue y NSInvocationOperation
• Se debe de programar a bajo nivel sólo si es estrictamente necesario.
7
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos: implementación (2)• NSOperationQueue: cola de operaciones, gestiona la
ejecución de las operaciones de forma concurrente.• maxConcurrentOperationCount: parámetro que indica el
número máximo de operaciones concurrentes a ejecutar.
• NSInvocationOperation: subclase de NSOperation que se encarga de ejecutar una tarea en concreto.
8
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Hilos: implementación (3)• Ejemplo de uso:
9
// Creamos una cola de operacionesNSOperationQueue *queue = [[NSOperationQueue alloc] init]; // Creamos una operación que contenga la tarea a ejecutarNSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(metodoEnHilo:) object:objectToPassToMethod]; // Añadimos la operación a la cola[queue addOperation:operation];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Índice de contenidos• Ejecución en background• ¿Qué es y para qué sirve?• Estados de ejecución en iOS• Ejecución en background: Procesos permitidos• Ejecución en background: Otros procesos• Implementación en iOS
10
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Ejecución en Background• Background = segundo plano• Ejecución de tareas cuando la aplicación se encuentre en
segundo plano.• Disponible a partir de iOS 4.0• SDK disponible.• Background <> Foreground
• Varios estados de ejecución de una aplicación iOS.
11
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Ejecución en Background• Flujo de estados de ejecución en iOS:
12
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Background: Procesos permitidos• Tiempo de ejecución en background: ilimitado• Indicar en el fichero Info.plist con la clave UIBackgroundModes
• Apple sólo permite ciertos procesos:• Audio. Framework: MediaPlayer• Servicios de localización. Framework: CoreLocation• Voip• Contenidos Newsstand. Descarga de contenidos.• Accesorios externos (conectados mediante cable, 30-pin o
bluetooth). Framework: ExternalAccessory• Dispositivos bluetooth. Framework: CoreBluetooth
• Otros tipos de procesos disponen de un tiempo limitado para ejecutarse.
13
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Background: Otros procesos• Cualquier otro proceso que no esté entre los permitidos debe de
realizarse en un tiempo determinado.• Uso para tareas “importantes”. Ejemplos:• Descarga de ficheros que no se pueden interrumpir.• Comunicación con un servicio web.• Tareas muy cortas que se deben de realizar obligatoriamente.
• iOS admite un máximo de 10 minutos en modo background aproximadamente.
14
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Background: Implementación (1)• Código en AppDelegate:
15
// Aplicación entra en segundo plano-‐ (void)applicationDidEnterBackground:(UIApplication *)application{ // TODO: implementar tareas a realizar en background}
// Aplicación pasa de segundo plano a primer plano-‐ (void)applicationWillEnterForeground:(UIApplication *)application{ }
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Background: Implementación (2)• Determinar si el dispositivo acepta modo background:
• Obtener el estado de ejecución actual:
• UIApplicationStateActive• UIApplicationStateInactive • UIApplicationStateBackground
16
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = [device isMultitaskingSupported];
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Background: recomendaciones• No hacer llamadas OpenGL (Juegos...)• Cerrar sockets abiertos, cancelar servicios de descubrimiento
de dispositivos (Bonjour...).• Contemplar la posibilidad de fallos o excepciones en
background.• No usar servicios como la Agenda.• No actualizar vistas.• No mostrar ventanas de alertas (AlertView)...• En general: realizar el mínimo trabajo posible en background ->
menos procesamiento, ahorro de batería.
17
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Índice de contenidos• Notificaciones locales• ¿Qué son y para qué sirven?• Diferencias con notificaciones push• Implementación en iOS
18
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales• Mensajes emergentes que aparecen en el dispositivo.• Se permite texto, sonido y badge (número en el icono de la
app).• Objetivo: captar la atención del usuario para que abra nuestra
aplicación.• Ej: Avisar al usuario de una cita que tenía programada.
• Disponibles a partir de iOS 4.0• Implementación muy sencilla.• Se programan indicando una fecha concreta para la notificación• Notificaciones locales != notificaciones push.• De cara al usuario son exáctamente iguales.
19
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales y Push• Notificaciones push:• Se generan los mensajes desde un servidor externo.• Necesitan pasar por el APNS (servidor de notificaciones de
Apple).• Requieren certificados SSL en el servidor.• No se pueden probar en el simulador• Funcionan con la aplicación terminada (totalmente cerrada)
• Notificaciones locales:• Se generan los mensajes desde el propio dispositivo.• No necesitan servidor externo ni APNS ni certificados. • Sí se pueden probar en el simulador.• Funcionan con la aplicación terminada (totalmente cerrada).
20
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales
21
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales: Implementación (1)• Clase: UILocalNotification• Propiedades disponibles:• fireDate -> fecha de la notificación (NSDate)• timeZone -> franja horaria (por defecto: defaultTimeZone)• alertBody -> Texto de la notificación• alertAction -> Texto de desbloqueo del dispositivo.• soundName -> nombre del fichero de sonido.• applicationIconBadgeNumber -> número que aparece en el
icono.• userInfo -> diccionario con información extra de la notificación
(NSDictionary).
22
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales: Implementación (2)• Ejemplo básico:
23
UIApplication* app = [UIApplication sharedApplication]; UILocalNotification* alarm = [[UILocalNotification alloc] init];if (alarm){ alarm.fireDate = fechaNotificacion; // Tipo NSDate alarm.soundName = @"alarmsound.caf"; alarm.alertBody = @"La clase empieza en 10 minutos!"; [app scheduleLocalNotification:alarm];}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales: Implementación (3)• Cancelar todas las notificaciones locales:
• Cancelar una notificación en concreto:
24
UIApplication* app = [UIApplication sharedApplication]; NSArray *notificacionesProgramadas = [app scheduledLocalNotifications]; // Cancelo todas las notificaciones programadasif ([notificacionesProgramadas count] > 0) [app cancelAllLocalNotifications];
[[UIApplication sharedApplication] cancelLocalNotification:not];
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
Notificaciones Locales: Implementación (4)• Gestionar notificaciones locales cuando la aplicación está
activa:• En AppDelegate:
25
- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif {
NSString *textoAlerta = notif.alertBody; application.applicationIconBadgeNumber=notification.applicationIconBadgeNumber-1;
}
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Servicios iOS © 2012-13 Depto. Ciencia de la Computación e IA background e hilos
• ¿Preguntas...?
26