youtubers tesis sobre sirve resumida que para investigaciones investigacion historia caracteristicas android broadcastreceiver

android - tesis - ¿Cuándo registrar/anular el registro de los receptores de difusión creados en una actividad?



tesis sobre youtube pdf (4)

Tengo la necesidad de crear un receptor de difusión personalizado en el evento onCreate de una actividad y obviamente necesito anular la inscripción del receptor de difusión en el evento onDestroy de la actividad

Para mayor claridad, este es un fragmento del código que uso

public class AnActivity extends Activity { private ResponseReceiver receiver; public class ResponseReceiver extends BroadcastReceiver { public static final String ACTION_RESP = "mypackagename.intent.action.MESSAGE_PROCESSED"; @Override public void onReceive(Context context, Intent intent) { // TODO Start a dialogue if message indicates successfully posted to server } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP); filter.addCategory(Intent.CATEGORY_DEFAULT); receiver = new ResponseReceiver(); registerReceiver(receiver, filter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); }

He leído que los eventos onPause / onResume y onStart / onStop para la actividad también deben registrarse y anular el registro del receptor de difusión.

Realmente quiero entender lo que se considera la mejor práctica para esto y por qué.


Android puede matar su aplicación al omitir el método onStop() . La mejor manera de resolver esa situación es registrar BroadcastReceiver en el método onResume() y anular el registro en onPause() .


Dado que onDestroy() no está garantizado para ser llamado, deberá usar onPause() para onPause() registro. Considera el ciclo de vida de tu receptor de emisión: ¿Necesitas que esté activo, solo cuando tu actividad está en primer plano? Luego use onResume() / onPause()


Debe registrar y anular el registro de sus receptores en onStart() y onStop() .

La única razón por la cual una actividad registraría BroadcastReceiver es usar los eventos de alguna manera en la actividad actual, para informar al usuario de un evento. Si se ha llamado a onStop() , la Activity ya no está en primer plano y, por lo tanto, no puede actualizar al usuario.

Si desea recibir eventos de transmisión en segundo plano, debería considerar usar un servicio como se indica here .

Al igual que Konstantin, no se garantiza que onDestroy() se onDestroy() , y podría continuar recibiendo transmisiones durante un tiempo prolongado, cuando la Activity ya no esté abierta.


La documentación de Android no prescribe un solo lugar para registrar / anular el registro de receptores de difusión, pero menciona tanto onStart() / onStop() como onResume() / onPause() como posibilidades.

El factor más importante al tomar esta decisión es, ¿cuándo necesita su receptor poder hacer su trabajo? Esto determinará cuándo registrarse y cancelar el registro.

  • ¿Necesita el receptor hacer algo con la transmisión solo cuando la actividad está enfocada? Si es así, puede registrar / anular el registro en onPause() / onReceive() . (También puede utilizar una vida útil más larga, como onStart() / onStop() , pero luego debe verificar durante la recepción en onReceive() si la actividad está enfocada).

  • ¿El receptor necesita hacer algo cuando está visible, incluso si no tiene foco (por ejemplo, cuando se muestra un diálogo)? Si es así, use onStart() / onStop() (o una vida útil más larga, pero una vez más, el receptor onReceive() debería verificar si la actividad está visible).

  • ¿El receptor necesita saber sobre la transmisión incluso cuando la actividad no es visible? Por ejemplo, ¿necesita recordar que algo ha sucedido, de modo que cuando la actividad se vuelve visible, puede reflejar el estado de cosas resultante? Luego debe usar onCreate() / onDestroy() para registrar / anular el registro. (Tenga en cuenta que hay otras formas de implementar este tipo de funcionalidad).

Si se registra en onStart() , no los registre también en onResume() , porque eso sería redundante: onResume() nunca se llama sin que onStart() se llame primero.

También tenga en cuenta que es mejor mantener OnPause () lo más ligero posible :

la ejecución de onPause () es muy breve, y no necesariamente brinda suficiente tiempo para realizar operaciones de salvar. Por esta razón, no debe usar onPause () para guardar aplicaciones o datos de usuario, realizar llamadas de red o ejecutar transacciones de bases de datos; tal trabajo puede no completarse antes de que el método se complete. En su lugar, debe realizar operaciones de apagado de carga pesada durante onStop ().

Es cierto que no se garantiza que onDestroy() se onDestroy() si el sistema cancela su proceso para ahorrar memoria. Sin embargo, si el proceso se cancela, el proceso no recibirá transmisiones de todos modos. En ese caso, ¿es realmente necesario anular el registro de los receptores de difusión?