2011-01-10 32 views
8

Extiendo BroadcastReceiver, y en onReceive() hago todo lo que tengo que hacer.BroadcastReceiver onReceive timeout

onReceive() tiene un tiempo de espera, a partir de la documentación:

hay un tiempo de espera de 10 segundos que El sistema permite, antes de considerar el receptor a bloquear y un candidato a matar

Esto crea un problema cuando estoy en modo de depuración. Necesito más de 10 segundos (a veces). Si no hago toda mi depuración en 10 segundos, mi conexión se cierra y se detiene la depuración.

¿Puedo aumentar el tiempo de espera o desactivarlo para la depuración?

Gracias.

+0

Si estás haciendo algo que lleva más de una fracción de segundo en tu receptor de emisión, lo estás haciendo mal. – Falmarri

+4

Lee mi comentario a continuación. Estoy hablando del modo DEBUG. –

Respuesta

11

Con el fin de evitar que la aplicación de la fuerza de cierre mientras está detenido en un punto de ruptura durante la depuración, prueba a instalar la aplicación Herramientas Dev y permitir la depuración de aplicaciones entorno cuales:

le permite seleccione la aplicación para depurar . No es necesario ajustar esta opción en adjuntar un depurador, pero establecer este valor tiene dos efectos:

  • Se evitará Android de lanzar un error si se detiene en un punto de interrupción durante mucho tiempo, mientras que depuración .

Todos los detalles están aquí: http://developer.android.com/tools/debugging/debugging-devtools.html

Si usted está haciendo algo complicado en su método de onReceive, y luego considerar tener su BroadcastReceiver iniciar una Service y pasar a lo largo de los datos se hace desde dentro onReceive. El Service puede hacer el procesamiento más largo.

+1

Esto es correcto. El ÚNICO objetivo de un receptor de difusión debe ser pasar datos a otra cosa. – Falmarri

+1

Chicos, estoy de acuerdo con ustedes. Tienes razón. En una versión de lanzamiento, no debería demorar tanto. Pero estoy hablando en modo DEBUG, cuando estoy depurando a través de mi código. –

+0

No importa que esté en el modo "DEPURAR". Aún desea que el receptor pase a otro componente inmediatamente, probablemente se le recomiende un Servicio como elevine.Ese es el diseño correcto y será más fácil depurar y solucionar problemas, así como no causar tiempos de espera del receptor (¿su registro, o lo que sea que esté tardando más? En el Servicio). –

1

Encontré este problema incluso cuando estaba en modo de depuración. Resultó que se estaba enviando otra transmisión y no se estaba procesando porque estaba depurando la otra transmisión en el hilo principal. Android consideró que mi proceso estaba en ANR y mató a todo el proceso.

Tuve que modificar temporalmente el código para no llamar a la otra transmisión mientras hacía mi depuración.

+0

¿Cómo lo modificó usted? Estoy teniendo el mismo problema. – Para

+0

@Para, comenté el código que envió difusiones en la sección que estaba depurando comenzando con el punto de corte. –

Cuestiones relacionadas