Diferencia principal entre el registro manifiesto y programático de BroadcastReceiver

Estoy tratando de entender las principales diferencias entre registrar un BroadcastReceiver en el Manifiesto y registrarlo mediante programación ...

Mi comprensión es básicamente la siguiente (agradecería que alguien corrija mis puntos si me falta algo).

Registrado en Manifiesto:

El sistema operativo buscará mágicamente e instanciará su clase si es necesario, llamando al método onReceive (), independientemente del estado de ejecución de su aplicaciónSu recepción solo se llamará una vez por transmisión (es decir, puede considerar que registrarse en el manifiesto es como registrar su 'clase' para recibir la transmisión, y la transmisión instancia su clase según sea necesario) (??)

Registrado programáticamente:

registrarse en código significa que está registrando instancias de su clase para recibir mensajes de difusión (es decir, si su código es un poco descuidado y logra registrarse varias veces, terminará con varias instancias de BroadcastReceiver, todas con su onReceive () solicitado una emisiónpara cancelar el registro, debe cancelar el registro de la instancia específica de BroadcastReceiver que registró anteriormentesi su sistema operativo destruye su aplicación, su método onReceive () no será llamado para una transmisión

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta