2011-01-10 14 views
8

Estendo BroadcastReceiver e in onReceive() faccio tutto quello che devo fare.BroadcastReceiver onReceive timeout

onReceive() ha un timeout, dalla documentazione:

c'è un timeout di 10 secondi che il sistema permette prima di considerare il ricevitore da bloccare e candidato essere uccisi

Questo crea un problema quando sono in modalità di debug. Ho bisogno di più di 10 secondi (a volte). Se non faccio tutto il mio debugging in 10 secondi la mia connessione è chiusa e il debug è stato interrotto.

Posso aumentare il timeout o disabilitarlo a scopo di debug?

Grazie.

+0

Se stai facendo cose che richiedono più di una frazione di secondo nel tuo ricevitore broadcast, stai sbagliando. – Falmarri

+4

Leggi il mio commento qui sotto. Sto parlando della modalità DEBUG. –

risposta

11

Al fine di evitare che il vostro app dalla forza di chiusura mentre si è in sosta su un punto di interruzione durante il debug, provare a installare lo Strumenti applicazione Dev e abilitare il debug App impostazione cui:

consente di selezionare l'applicazione per il debug . Non è necessario impostare questo per collegare un debugger, ma l'impostazione di questo valore ha due effetti:

  • Si eviterà Android da lanciare un errore se si mette in pausa su un punto di interruzione per lungo tempo, mentre debug .

Tutti i dettagli sono qui: http://developer.android.com/tools/debugging/debugging-devtools.html

Se si sta facendo qualcosa di complicato nel metodo onReceive, quindi prendere in considerazione avere il vostro BroadcastReceiver iniziare una Service e passare lungo i dati che riceve dal di dentro onReceive. Lo Service può quindi eseguire l'elaborazione più lunga.

+1

Questo è corretto. Lo scopo SOLE di un ricevitore di trasmissione dovrebbe essere quello di passare i dati a qualcos'altro. – Falmarri

+1

Ragazzi, sono d'accordo con voi. Hai ragione. In una versione di rilascio non dovrebbe richiedere molto tempo. Ma sto parlando in modalità DEBUG, quando eseguo il debugging del mio codice. –

+0

Non importa che tu sia in modalità "DEBUG". Si desidera comunque che il ricevitore passi immediatamente a un altro componente, probabilmente un servizio consigliato come elevino.Questa è la progettazione corretta e sarà più facile eseguire il debug e la risoluzione dei problemi e non causare il timeout del ricevitore (eseguire la registrazione o qualsiasi altra operazione che richiede più tempo nel servizio). –

1

Ho riscontrato questo problema anche in modalità di debug. Si scopre che un'altra trasmissione è stata inviata e non è stata gestita perché stavo eseguendo il debug dell'altra trasmissione sul thread principale. Android ha considerato il mio processo di essere in ANR e ha ucciso l'intero processo.

Ho dovuto modificare temporaneamente il codice per non chiamare l'altra trasmissione mentre eseguivo il debug.

+0

In che modo lo hai modificato in modo esatto? Sto avendo lo stesso problema. – Para

+0

@Para, ho commentato il codice che ha inviato le trasmissioni nella sezione che stavo eseguendo il debug a partire dal punto di interruzione. –

Problemi correlati