2012-10-08 14 views
7

estoy trabajando en aplicación que compruebe alguna de la situación de teléfono cada 5 segundos. lo he hecho de que:rosca y el consumo de la batería

Thread checking = new Thread() { 
    public void run(){ 
     while(<<some status>>) { 
      <<checkstatus and do something>> 
      Thread.sleep(5000); 
     } 
    } 
} 

Esto es malo para la batería? ¿Cómo puedo hacer que en el otro lado? El servicio deja de funcionar después de unos segundos.

Respuesta

5

Para responder a su pregunta, depende de lo que está haciendo en el interior del bucle while.

Si no está utilizando y despertar cualquier componente "caros" (como Internet, bluetooth, otros sensores, y la pantalla), que debe estar bien. Esencialmente, así es como funciona el sistema operativo en segundo plano de todos modos y el uso de un hilo es una de las formas más baratas.

Además, si su tarea es la CPU, que agotaría la batería también.

Su servicio debería funcionar bien si lo haces bien.

Otra forma sería usar los manipuladores, que abstraerá gran parte de las gestiones de rosca para usted.

+0

Gracias por la respuesta. Verifico si hay algunos SMS no leídos y el usuario lo recuerda. Esta es la mejor manera de hacerlo? ¿Hay alguna posibilidad de que Android mate mi hilo? –

+1

Por favor refiérase a http://stackoverflow.com/questions/1973071/broadcastreceiver-sms-received para obtener información sobre la recepción de SMS. Probablemente deberías usar un receptor en su lugar. – Edison

2

Thread.sleep() hace hilo actual a suspender, lo que significa CPU estará disponible para otros hilos o simplemente apagarse. Tenga en cuenta también que el interruptor de contexto de las fuerzas de sueño, pero usted está en el lado seguro con un gran intervalo de sueño. Entonces, en términos generales, todo depende de usted.

que puede utilizar, por ejemplo, PowerTutor para asegurarse de que su aplicación se ha diseñado e implementado correctamente.