2011-09-18 11 views
12

Bueno, en android, ¿cuál es la diferencia entre haciendo algo en broadcastReceiver y llamando a otro servicio en broadcastReceiver? Creo que ambos se ejecutan en segundo plano, ¿verdad?BroadcastReceiver vs Service

En realidad, lo que lo haga es:

En determinado momento del día a día, descargue el evento de usuario (por ejemplo: 9:00 am comer desayuno) de base de datos y configurar el AlarmManager para mostrar notificación sobre el evento.

Ahora configuré un administrador de alarmas para realizar la tarea anterior. Y estoy desconcertado si logro esto directamente en BroadcastReceiver o llamo al servicio en BroadcastReceiver para lograr esto.

Gracias.

Respuesta

16

Usted debe hacer el proceso tan poco en un BroadcastReceiver posible debido a que (citando el Android Blog)

Al manejar una emisión, la aplicación se da un conjunto fijo de tiempo (actualmente 10 segundos) para realizar su trabajo. Si no se completa en ese momento, se considera que la aplicación es portándose mal, y su proceso se arrojó inmediatamente al estado de fondo para que se elimine la memoria si es necesario.

5

Definely debe llamar a un servicio del receptor para este fin, si su acción lleva más tiempo (conectarse a Internet puede tomar un poco). Los receptores de difusión están limitados por la cantidad máxima de tiempo, tienen que terminar.

del ciclo de vida del proceso

Un proceso que se está ejecutando actualmente una BroadcastReceiver (es decir, ejecutando actualmente el, método de intención) código en su OnReceive (contexto) se considera que es un proceso en primer plano y habrá se mantiene funcionando por el sistema excepto en casos de presión de memoria extrema.

Una vez que regrese de OnReceive(), el BroadcastReceiver ya no es activo, y su proceso de alojamiento es tan importante como cualquier otro componente de aplicaciones que se ejecutan en él. Esto es especialmente importante porque BroadcastReceiver (un caso común para aplicaciones con las que el usuario ha interactuado nunca o no recientemente), luego de regresar de onReceive() el sistema considerará que su proceso es empty y elimínalo de forma agresiva para que los recursos estén disponibles para otros procesos importantes de .

Esto significa que para las operaciones de mayor duración, a menudo utilizará un servicio junto con un BroadcastReceiver para mantener activo el proceso que lo contiene durante todo el tiempo de su operación.

de: BroadcastReceiver