Domanda

Sono nuovo al concetto di Wakelock e bisogno del vostro aiuto.

Domande:

  1. 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?

  2. 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?

  3. link alle documentazioni ufficiali e interessante resoconto sulla wakelocks sono apprezzati.

Grazie.

È stato utile?

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

  1. 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 del BroadcastReceiver di nuovo. Dal momento che non si dovrebbe mai eseguire codice a lungo in un BroadcastReceiver (usarlo per lanciare un Service invece), si può sostanzialmente ritenere che il codice non viene mai eseguito mentre il telefono sta dormendo. Naturalmente, se si utilizza un BroadcastReceiver di avviare un Service, di solito si dovrebbe ottenere un Wakelock.

  2. 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 un AsyncTask standard non sembra interrompere l'esso.

  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top