Domande Principianti: Wakelocks
Domanda
Sono nuovo al concetto di Wakelock e bisogno del vostro aiuto.
Domande:
-
assumo Wakelock sia qualche tipo di serratura che afferrandolo per il codice eseguito impedisce il dispositivo di dormire. Che cosa succede se il dispositivo è già in modalità sleep / standby, si esegue il codice, allora? Supponendo che non avrebbe mai acquisire un Wakelock?
-
Quando un compito lungo in esecuzione (circa 7-8 sec) è fatto in un thread in background (AsyncTask) dovrei essere preoccupato di possesso di un Wakelock? Non AsyncTask già acquisire per me?
-
link alle documentazioni ufficiali e interessante resoconto sulla wakelocks sono apprezzati.
Grazie.
Soluzione
1. Se il telefono è in modalità completa di sonno, oltre a una chiamata in arrivo, è possibile utilizzare un AlarmManager intento di riattivare il telefono in su.
AlarmManager documentazione relativa alla classe:
Il Gestore allarme detiene una scia della CPU blocco fino a quando il ricevitore di allarme Metodo OnReceive () è in esecuzione. Questo garantisce che il telefono non sonno fino ad avere la gestione finito la trasmissione. Una volta OnReceive () resi, i rilasci Alarm Manager questo blocco scia. Ciò significa che il telefono, in alcuni casi dormire più presto come i vostri OnReceive () metodo termina. Se il ricevitore di allarme chiamato Context.startService (), è possibile che il telefono dormire prima della servizio richiesto è lanciato. A evitare questo, il vostro BroadcastReceiver e il servizio sarà necessario implementare un la politica di blocco scia separata per garantire che il telefono continua a funzionare fino a quando il servizio diventa disponibile.
2. Se si sta lavorando con una AsyncTask , vorranno pubblicare i risultati al thread UI su onPostExecute()
AsyncTask documentazione:
AsyncTask consente un uso corretto e facile del thread dell'interfaccia utente. Questa classe consente di eseguire operazioni in background e pubblicare risultati sul thread UI senza dover manipolare fili e / o gestori.
3.I suggerisco di avere una lettura alla documentazione ufficiale di Power Manager che dà una buona introduzione al concetto Wakelock.
Altri suggerimenti
-
In genere l'unico codice che avrebbe eseguito mentre il telefono sta dormendo è un
BroadcastReceiver
. In realtà, il telefono si sveglia per un secondo, esegue il codice e dorme delBroadcastReceiver
di nuovo. Dal momento che non si dovrebbe mai eseguire codice a lungo in unBroadcastReceiver
(usarlo per lanciare unService
invece), si può sostanzialmente ritenere che il codice non viene mai eseguito mentre il telefono sta dormendo. Naturalmente, se si utilizza unBroadcastReceiver
di avviare unService
, di solito si dovrebbe ottenere un Wakelock. -
Con un
AsyncTask
avviata dall'utente, non si ha realmente bisogno di preoccuparsi WakeLocks. E 'improbabile che il telefono sarà dormire mentre è in esecuzione. Non sono sicuro se ottengono un Wakelock, ma mettere il mio telefono a dormire durante l'esecuzione di unAsyncTask
standard non sembra interrompere l'esso. -
Come STED detto, check this out: http: // sviluppatore .android.com / riferimento / android / os / PowerManager.html
In sostanza l'unica volta che è necessario preoccuparsi WakeLocks è quando ci si aspetta sia vostro compito di essere interrotto da dormire (come è il caso se si imposta un allarme che si sveglia il telefono brevemente) o se assolutamente non può avere il compito interrotta. In caso contrario, basta assicurarsi che si gestisce con garbo alcuna interruzione.