2012-02-01 17 views
8

Soy relativamente nuevo en Android, así que lo que estoy pidiendo puede parecer obvio (aunque he leído todas las preguntas con el mismo título y he buscado mucho). Necesito monitorear el acelerómetro continuamente por largos períodos. Se han sugerido dos enfoques:Android: Servicio de primer plano frente a wakeLock

1) adquiere un bloqueo de activación parcial que se mantiene durante todo el tiempo que se está controlando el acelerador; y

2) controlar el acelerómetro en un servicio en primer plano.

El primer enfoque parece utilizar una gran cantidad de batería. El segundo enfoque debería dar como resultado un servicio que solo se elimina en raras ocasiones, pero no estoy seguro de qué significa "raramente". ¿Qué enfoque debería usarse, y hay alternativas que debería considerar?

+0

Hola Doug, ¿de dónde sacaste esa información? – Bush

+0

Si aún está interesado, intente con el enfoque del administrador de alarmas: http://stackoverflow.com/questions/15451347/android-design-background-long-running-service-or-alarmmanager –

Respuesta

5

Tener un WakeLock y un primer plano Service no están realmente relacionados y no deben compararse en qué dirección es mejor.

Android OS está diseñado para intercambiar procesos en función de una variedad de factores. Esto significa que su proceso puede ser asesinado en cualquier momento por Android y proporciona un marco para ayudarlo a usted, el desarrollador, a garantizar que su aplicación pueda guardar y restaurar su estado cuando esto suceda.

A WakeLock simplemente impide que la CPU se apague, lo que ayuda a ahorrar batería cuando el teléfono no está en uso.

Ahora, una combinación de ambos le ayudaría a lograr lo que quiere pero a un gran costo para el usuario. No me gustaría tener una aplicación en mi teléfono para mantener constantemente encendida la CPU o un icono de notificación para que aparezca constantemente en la barra de notificaciones (eso es lo que hace un servicio en primer plano).

Tenga en cuenta que iniciar un servicio en el modo de primer plano no garantiza que su aplicación no muera. Puede que todavía suceda, aunque rara vez.

¿Qué es lo que estás tratando de lograr aquí? ¿Por qué seguir monitoreando el acelerómetro de los dispositivos? Quizás solo deba supervisarlo solo cuando en su lugar esté en primer plano un Activity de su aplicación.

+2

¿Todos los servicios de primer plano tienen bloqueos de activación? Por ejemplo, el las aplicaciones de música tienen bloqueo parcial de activación. ¿Es este el caso con todos los servicios de primer plano también? – Basher51

1

Tenía exactamente la misma necesidad y problema. Creo que la solución es usar tanto un bloqueo parcial de activación como un servicio de primer plano. Android intentará no eliminar un servicio en segundo plano que contenga un bloqueo de activación, pero es libre de matarlo cuando necesite los recursos y posiblemente reiniciarlo más tarde. Eso está bien para muchos propósitos, pero al menos en mi caso eso no es lo suficientemente bueno. Poner un servicio en el estado de primer plano es la forma de decirle a Android que matarlo es inaceptable. Sí, aún podría suceder en situaciones extremas, pero eso sería una violación del contrato API, mientras que con un servicio en segundo plano, Android puede matarlo. Por lo tanto, probablemente debas codificar como si eso nunca sucediera, pero solo debes saber que este es un posible pero raro error.

+0

¿Todos los servicios de primer plano tienen bloqueos de activación? Por ejemplo, las aplicaciones de música mantienen bloqueos de activación parciales. ¿Es este el caso con todos los servicios de primer plano también? – Basher51

Cuestiones relacionadas