[ACTUALIZADO] Comprobado: La App de Facebook “abusa” de la ejecución en background y se “come” la batería

ACTUALIZADO: En iOS 7 también ocurre lo que cuento aquí.

Hace unos días que la gente pregunta si la App de Facebook para iOS se come la batería o no, así que como tengo los instrumentos necesarios para comprobarlo, he decidido ver qué pasa con la dichosa App.

En el curso que imparto en la UCH-CEU explicamos cuál es el problema del consumo de la batería. Apple permite que las aplicaciones se ejecuten en segundo plano en distintos modos. Uno de ellos te permite ejecutar cualquier cosa en background durante unos 10 minutos aproximadamente – no siempre son los mismos – para evitar que te prolongues ejecutando tu app indefinidamente y te “comas” la batería. ¿Qué pasa con esto? Que cada vez que abres la app, esa “cuenta atrás” se resetea y te permite ejecutar de nuevo esos 10 minutos. Lo cierto es que es algo que está muy bien y es muy útil, pero Apple te pide que cuando termines de hacer lo que quieres hacer, “avises” a iOS para que termine tu ejecución, cosa que, si eres un buen programador, haces. La razón es muy simple: un proceso corriendo consume batería. Moraleja: si no lo usas, termínalo. Pero… ¿y si no lo haces? Pues ahí se queda durante 10 minutos.

Pero la cosa es peor. Parece ser que hay una forma de saltarse esta restricción. En este hilo dicen que es posible hacer correr una app en background más de 10 minutos: http://stackoverflow.com/questions/9738488/run-app-for-more-than-10-minutes-in-background y qué mejor forma de comprobarlo que hacer un programa. Así que he cogido una de mis Apps y le puesto un código que cada 60 segundos pide a iOS que una nueva tarea en background y cada vez que pido una nueva tarea, he loggeado el tiempo que iOS me da para terminarla. Pues esto es lo que aparece por pantalla cada 60 segundos:

2013-06-06 14:19:44.824 Salterio Pro[3743:c07] -[SPAppDelegate longRunningTest]:Time extended,599.998372

2013-06-06 14:20:14.907 Salterio Pro[3743:c07] -[SPAppDelegate longRunningTest]:Time extended,599.99928

[… Muchos minutos después …]

2013-06-06 14:48:44.809 Salterio Pro[3743:c07] -[SPAppDelegate longRunningTest]:Time extended,599.999273

2013-06-06 14:49:14.890 Salterio Pro[3743:c07] -[SPAppDelegate longRunningTest]:Time extended,599.999387

 

Es decir, que se puede hacer que una app corra durante más de 10 minutos en background sin control. ¡Apple BIG FAIL!

Para ver qué hacía Facebook, lo que he hecho es coger Instruments, que permite hacer mediciones de programas de iOS, conectar mi iPhone 5 y ver qué pasa con la dichosa aplicación. He hecho varias pruebas de más de 10 minutos, para ver qué pasa con la App siempre repitiendose el mismo patrón:

  • He arrancado la app
  • En el segundo 14 aprieto el botón Home de mi iPhone. La app pasa a background.
  • La app se mantiene en ejecución hasta el instante 2:14. Arranca durante unos 3-4 segundos y se para.
  • 8 minutos después aproximadamente, la app se arranca unos 3-4 segundos y se para.
  • 8 minutos después aproximadamente, lo mismo.
Ejecución App Facebook
Ejecución App Facebook

He hecho esto tres veces y las tres veces sale exactamente igual. Durante la ejecución de la imagen no he recibido ni una notificación.

¿Esto que significa? Que cada 8 minutos Facebook se arrancará y si hay información nueva en tu Facebook se descargará parte de la información. Y eso, claro está, consume batería. ¿Cuanta? Pues depende del tiempo de CPU y de la descarga. Pero sí, es un consumo permanente cada 8 minutos.

Salvo que yo haya metido la pata en algo, parece que sí, que la App de Facebook arranca varias veces en background. ¿Y eso es puede hacer? Pues no, no se puede. Es una cosa que puede hacer que Apple se la “cargue” de la AppStore:

2.16 Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.
13.2 Apps that rapidly drain the device’s battery or generate excessive heat will be rejected

P.D.: No sé si tiene que ver con esto o no, pero muchas veces las notificaciones de Facebook no “suenan” en el dispositivo. Es posible que se deba a que la aplicación en realidad no recibe las notificaciones cuando está suspendida, sino ejecutándose en background. Cuando una App está ejecutándose las notificaciones no “suenan”. ¿Os pasa lo mismo?

Anuncios

Un comentario sobre “[ACTUALIZADO] Comprobado: La App de Facebook “abusa” de la ejecución en background y se “come” la batería

Los comentarios están cerrados.