2013-01-02 17 views
12

Sono un po 'confuso dopo aver risposto alle domande & risposte in Stackoverflow circa WakefulIntentService. Vorrei solo avere una certa conoscenza di questi argomenti per assicurarmi che la mia comprensione sia corretta, per favore sentitevi liberi di correggermi, se sbaglio.Servizio, WakeLock

Ho creato una piccola applicazione, dove sto usando uno sfondo Service che continua a riprodurre musica ogni volta che l'utente scuote il telefono. Ho provato dopo che il dispositivo è stato bloccato e lo schermo è spento e funziona come previsto.

  1. Quello che sto sentendo da this forum, il servizio potrebbe spegnerà non appena il dispositivo va a addormentato. È vero? Nel mio caso, funziona sempre, mi manca qualcosa?

  2. Qual è la necessità di WakeFulIntentService? Quando dobbiamo usare WakefulIntentService?

  3. Ho provato a eseguire un timer in un Service, anche se il dispositivo è bloccato e lo schermo è spento e il mio timer è in esecuzione praticamente posso dire con certezza. Perché ricevevo una notifica ogni volta che il mio timer scatta.

risposta

16

Quello che sto sentendo da questo forum, il servizio potrebbe spegnerà non appena il dispositivo va a addormentato. È vero?

Sì.

Nel mio caso, funziona sempre

Poi qualcosa d'altro sul dispositivo è mantenere il dispositivo di addormentarsi. Utilizzare forse adb shell dumpsys power per vedere quali sono le WakeLocks.

Qual è la necessità del servizio WakeFulIntent? Quando dobbiamo usare WakefulIntentService?

Il dispositivo potrebbe addormentarsi se l'utente è inattivo e nulla mantiene il dispositivo sveglio. A WakeLock viene utilizzato per garantire che il dispositivo rimanga sveglio. Per il lavoro di tipo transazionale (ad esempio, il download di un file), WakefulIntentService combina uno IntentService e uno WakeLock per rendere relativamente semplice il mantenimento del dispositivo per tutto il tempo necessario (e solo finché necessario).

WakefulIntentService non è adatto per l'uso con servizi che devono essere eseguiti indefinitamente, come un lettore musicale. Per quelli, gestisci il tuo WakeLock.

+0

Sto creando un thread nel mio servizio per mantenere sempre attivo il mio timer. Sto programmando il timer all'interno del metodo di esecuzione del thread? Se questo è il motivo per cui il timer è attivo anche se il dispositivo è bloccato. Ho provato su due dispositivi diversi e ha funzionato bene. Come ho capito, IntentService verrà ucciso una volta eseguita l'esecuzione. Voglio che un processo sia sempre in esecuzione in background per ascoltare le attività degli utenti, ogni volta che l'utente scuote il telefono, ho bisogno di avvisare gli utenti in base a criteri. Credo che il dispositivo si trasformi in modalità di sospensione non appena blocco il dispositivo e lo schermo è spento. –

+1

@Ramesh: "Voglio che un processo sia sempre in esecuzione in background per ascoltare le attività degli utenti, ogni volta che l'utente scuote il cellulare, ho bisogno di avvisare gli utenti in base a criteri" - che richiederà di mantenere un ' WakeLock' ha acquisito costantemente, con conseguenti danni alla durata della batteria dell'utente. I tuoi utenti ti premieranno con voti bassi sul Play Store. – CommonsWare

+1

Siamo spiacenti di infastidirti, come gmail, facebook, linkedin sincronizza le mail o si aggiorna automaticamente ogni x min? usano anche WakeLock? o abbiamo qualcos'altro che è efficiente per eseguire un processo per sempre? –

6

Ho usato il codice qui sotto in un'app.

Assicurarsi che il servizio è appiccicoso:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    //this service will run until we stop it 

    return START_STICKY; 
} 

mi volete che il vostro telefono per essere svegli costantemente u possibile utilizzare questo codice qui sotto:

private WakeLock wl; 

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "whatever"); 
    wl.acquire(); 

Non dimenticare i permessi nel vostro manifest .

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+5

In quali funzioni del servizio consigliate di mettere le chiamate "acquisisci" e "rilascia"? E se il servizio è un IntentService? –

Problemi correlati