Android 4.4 KitKat trajo consigo grandes novedades, incluso en temas de optimización. Pero esto no quiere decir que esta versión del sistema operativo sea perfecta. En El Androide Libre ya hemos hablado de algunos bugs y fallos que hemos encontrado en KitKat, o incluso de alguna de las actualizaciones que ya recibimos corrigiendo algunos de ellos.

Sin embargo, hoy vamos a hablar de algunos problemas que están apareciendo en la versión actual de KitKat, relacionados con los servicios en segundo plano.

Problema de consumo de batería en KitKat

El primero de ellos tiene que ver con el consumo de la batería. Y es que un programa que se ejecuta en segundo plano para el control de las cámaras en KitKat (conocido como mm-qcamera-daemon) parece estar detrás de este consumo de potencia que se está experimentando, así como de un recalentamiento, todo ello debido a un alto uso de la CPU de forma constante.

La semana pasada, cientos de dispositivos (incluyendo cientos de Nexus 5) reportaron el problema referente a que el software empezó a consumir mucha más batería que hasta ahora, provocando incluso el mencionado recalentamiento. A esto, Google respondió en las últimas 48 horas que han identificado el problema y que lo solucionarán en una actualización de mantenimiento para sus propios dispositivos Nexus (sin confirmar fecha), aconsejando a los propietarios de otros dispositivos contactar con sus fabricantes para que les proporcionen una solución.

El alto consumo de energía en los dispositivos no Nexus no es algo en lo que podamos ayudar. Si tienes un Note, u otro dispositivo no Nexus, tendrás que contactar con tu fabricante. Aunque el proceso de la cámara tiene el mismo nombre en muchos dispositivos que usan un chip de Qualcomm, el código será muy diferente, altamente personalizado para cada dispositivo. Las soluciones para un dispositivo no se aplican para el resto directamente.

Así lo confirmaba un miembro del proyecto Google AOSP (Android Open Source Project), a las quejas de que muchos Samsung Galaxy Note 3 con Android 4.3 también tenían problemas similares de consumo de batería.

Todo parece venir provocado, según Google, por una actualización de Skype, que comenzó a acceder regularmente a la cámara desde sus servicios en segundo plano, lo que provocaría este bug.

¿Hay alguna solución temporal hasta recibir la actualización? , aunque un poco drástica: podríamos desinstalar Skype o, en su defecto, reiniciar el teléfono, tal como confirman desde AOSP:

Desinstalar Skype podría reducir sustancialmente la probabilidad de este error, pero somos conscientes de que Skype es una aplicación muy importante para mucha gente. Otras aplicaciones que usen la cámara podrían provocar el error también, pero serían casos relativamente raros. La mayoría de las aplicaciones no acceden a la cámara hasta que no están en primer plano, por lo que sólo podrían provocar problemas cuando se utilizan de forma activa.

Problema de detención de servicios al parar aplicaciones en KitKat

En Android tenemos una gran ventaja, como es la libertad de poder ejecutar un servicio en segundo plano, incluso si la interfaz de una aplicación la hemos cerrado. Esto permite que tanto aplicaciones como widgets que dependen de servicios puedan estar actualizadas incluso sin ésta abierta. Es más, incluso si el servicio es finalizado (por falta de memoria o por la pantalla de Recientes, de forma manual por el usuario), el sistema se encargará de relanzarlo. Este comportamiento se supone que funciona de forma automática, siempre y cuando configuremos stopWithTask como false, lo que sucede cuando el servicio devuelve START_STICKY START_REDELIVER_INTENT  cuando el método onStartCommand ha sido llamado por el sistema operativo.

El problema viene cuando el servicio está cerrado por el sistema y se supone que debe reiniciar automáticamente, pero no lo hace. Esto puede provocar un problema real en el comportamiento esperado de nuestras aplicaciones y widgets. Desde AndroidPolice han creado una aplicación de ejemplo para recrear el error, con el código disponible en GitHub. Esta es la demostración:

Este problema surgió en la actualización a Android 4.4.1,  debido a una serie de pequeños parches destinados a corregir algunas cuestiones relacionadas con el ciclo de vida de los servicios. Los efectos secundarios no se hicieron evidentes hasta después del despliegue 4.4.2. La mayoría de los dispositivos Nexus tendrán este problema, pero parece que algunos fabricantes ya están intentando solucionar el problema por sí mismos antes de liberar su actualización de KitKat.

En la mayoría de los casos, este problema está viniendo por la pantalla Aplicaciones Recientes, que permite a los usuarios quitar aplicaciones, lo que provocaría el reinicio de los servidores. De esta forma, si nuestr aplicación no lleva una interfaz de usuario, al no estar disponible en Recientes, provocaría una aplicación con servicios generalmente seguros.

¿Cómo evitarlo? Es complicado este bug, y sin duda debemos esperar a una actualización. Pero mientras tanto, podemos intentar evitar en la media de lo posible pasar por la pantalla de Recientes. En casos de problemas de memoria (y que sea el sistema operativo el que está reiniciando los servicios), podríamos reiniciar el dispositivo.

A nivel de desarrolladores, se podría hacer una solución temporal con el uso del AlarmManager, para reiniciar servicios cerrados, pero esto presenta un nivel complejo de desarrollo, así como inconvenientes (por ejemplo, podríamos provocar un mayor consumo de la batería). Esta solución también ha sido implementada en el código de ejemplo que hizo AndroidPolice, si queréis verlo.

Y la actualización, ¿para cuándo? Un desarrollador subió un parche a mediados de febrero, el cual ha sido oficialmente incluido en AOSP. Es muy probable que este parche se incluya en la próxima actualización, pero se desconocen las posibles fechas, al menos hasta una confirmación oficial a través de AOSP.

El servicio NFC termina repetidamente en dispositivos Nexus con KitKat

NFC es, sin lugar a dudas, una de las características más llamativas añadidas en los últimos años a Android, permitiendo los pagos móviles a través de dispositivos. Pero en el caso de aquellos usuarios con dispositivo Nexus y actualización a KitKat, el servicio NFC finaliza repetidamente, provocando que las funciones asociadas a esta tecnología resulten inútiles.

Los dispositivos afectados son el Nexus 4, Nexus 5, Nexus 7 (en todas sus versiones) y el Nexus 10. Pero también ha sido confirmado el error en las siguientes compilaciones: 4.4/KRT16S, 4.4.1/KOT49E y 4.4.2/KOT49H.

Como solución temporal, algunos usuarios han avisado de que cambiando a modo avión en el dispositivo afectado, podríamos permitir una conexión antes de que el servicio NFC vuelva a su bucle de finalizaciones.

La buena noticia es que este error parece no estar afectando a mucha gente y que Google ha encontrado la causa del problema y lo tiene en su lista de cosas que hacer en la siguiente actualización. Pero si tú eres uno de los afectados, toca esperar.

Conclusiones

Estos problemas reportados son un ejemplo de que no todo es perfecto en Android, pero ¿existe la perfección? Lo que a mi modo de ver debe ser analizado es ver la pronta respuesta ante estos problemas (y otros) por parte de Google, y de cómo Google reacciona al respecto, tanto en tiempo, como en modo como en calidad.

Y tú, ¿has notado alguno de estos dos problemas en tu dispositivo?

Fuente Bug 1 | AOSP – Issue Tracker | ZDnet

Fuente Bug 2 | AOSP – Issue Tracker | AndroidPolice

Fuente Bug 3 | AOSP – Issue TrackerAndroidPolice