2012-10-08 15 views
7

Sto lavorando su app che controllano parte dello stato del telefono ogni 5 secondi. Ho fatto in modo che:Discussione e consumo batteria

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

Questo è un male per la batteria? Come posso farlo nell'altro modo? Il servizio smette di funzionare dopo un paio di secondi.

risposta

5

Per rispondere alla tua domanda, dipende da cosa stai facendo all'interno del ciclo while.

Se non si utilizza e non si svegliano componenti "costosi" (come internet, bluetooth, altri sensori e schermo), si dovrebbe andare bene. Essenzialmente questo è il modo in cui il sistema operativo funziona in background comunque e l'uso di un thread è uno dei modi più economici.

Inoltre, se l'attività è impegnativa per la CPU, si consuma anche la batteria.

Il servizio dovrebbe funzionare correttamente se lo fai correttamente.

Un altro modo sarebbe utilizzare gli Handler, che estenderanno gran parte della gestione dei thread per te.

+0

Grazie per la risposta. Controllo se ci sono degli SMS non letti e ti fornisco il promemoria dell'utente. Questo è il modo migliore per farlo? C'è possibilità che Android uccida il mio thread? –

+1

Fare riferimento a http://stackoverflow.com/questions/1973071/broadcastreceiver-sms-received per informazioni su Ricezione di SMS. Probabilmente dovresti usare un ricevitore. – Edison

2

Thread.sleep() rende il thread corrente da sospendere, il che significa che la CPU sarà disponibile per altri thread o semplicemente si spegnerà. Si prega di notare anche l'interruttore di contesto delle forze di sonno, ma si è al sicuro con un grande intervallo di sonno. Quindi, in generale, tutto dipende da te.

È possibile utilizzare, ad esempio, PowerTutor per assicurarsi che l'applicazione sia progettata e implementata correttamente.

Problemi correlati