iOS: ¿Monitorear el nivel de batería usa más batería? ¿Debería savese automáticamente?

Tengo una aplicación de GPS que ya usa una buena cantidad de batería. Debido a la naturaleza de la aplicación, no quiero que el usuario pierda todos sus datos si su batería muere sin que ellos lo sepan. Entonces, pensé que monitorearía la batería y luego saveía y detendría los datos del GPS si la batería es muy baja. Yo usaría:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryStateDidChange:) name:UIDeviceBatteryStateDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelDidChange:) name:UIDeviceBatteryLevelDidChangeNotification object:nil]; 

Entonces, algunas preguntas:

  • ¿Controlar la batería provocaría aún más drenaje de la batería?
  • ¿Es una buena idea save automáticamente (core-data) para el usuario justo antes de que la batería muera?

El dispositivo ya tiene que monitorear las notifications de la batería para mostrar el nivel de la batería cuando el time / operador / intensidad de la señal es visible … No espero que el logging de las notifications agregue ningún estrés adicional a nada (consumo de energía). Tal vez algunos ciclos extra de CPU de su aplicación para manejar la notificación. Todos los derechos reservados

El ahorro automático puede ser una idea inteligente.

Pero otra idea podría ser detener los services de GPS / CoreLocation para su aplicación una vez que la batería se encuentre por debajo de cierto nivel (u ofrecerla como una opción configurable por el usuario).

Si el iDevice muere mientras su aplicación se está ejecutando o mientras el dispositivo está "durmiendo", su UIApplicationDelegate recibirá un post de aplicación WillTerminate:.

Si la aplicación se colocó en segundo plano, puede manejar el almacenamiento allí también en la aplicación de su aplicación. WillEnterBackground

Tenga cuidado con el guardado automático, puede causar un uso aleatorio de la CPU que provoque que su interfaz de usuario sea entrecortada en intervalos supuestamente "aleatorios".