servicios ios - ua€¦ · ej: el propio sistema ios. • objetivo : realizar pequeñas tareas de...

26
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

Upload: others

Post on 10-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 2: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 3: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 4: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 5: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 6: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 7: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 8: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 9: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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];       

Page 10: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 11: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 12: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 13: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 14: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 15: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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{        }

Page 16: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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];

Page 17: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 18: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 19: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 20: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 21: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 22: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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

Page 23: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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];}

Page 24: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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];

Page 25: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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;

}

Page 26: Servicios iOS - ua€¦ · Ej: el propio sistema iOS. • Objetivo : realizar pequeñas tareas de forma paralela al proceso principal -> no bloquear la interfaz -> mejorar la experiencia

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