Tengo una necesidad de crear un receptor de radiodifusión personalizada en el evento OnCreate de una actividad y, obviamente, tengo que anular el registro del receptor de radiodifusión en caso OnDestroy de la actividadAndroid: cuándo registrarse/cancelar el registro de los receptores de difusión creados en una actividad?
Para mayor claridad este es un fragmento de código que utilizo
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 onPause/onResume y onStart/OnStop eventos para la actividad también debe registrar y anular el registro del receptor de radiodifusión.
Estoy realmente queriendo entender lo que se considera la mejor práctica para esto y por qué.
¿Está sugiriendo que me registre en el registro INSTEAD de onCreate o también? ¿Siempre se llama a OnResume cuando se crea una actividad? – jamesc
Debe registrarse onResume yes, onResume() siempre se invoca en la actividad que se muestra (es el último método llamado antes de que su actividad aparezca (http://developer.android.com/reference/android/app/Activity.html) si solo se registra en Crear() y anular el registro en Pausa(), la próxima vez que la actividad pase a primer plano, no se volverá a llamar a onCreate() y luego no volverá a registrar el receptor. Y sí, quiero decir EN LUGAR de, no lo haga onCreate(). – SnowyTracks
@SnowyTracks: ¿puede comentar por qué es preferible realizar llamadas de registro de BroadcastReceiver en Reanudar/Activar en lugar de enIniciar/detener? Si observa la guía del desarrollador de servicios enlazados, encontré [esto] (http : //developer.android.com/guide/components/bound-services.html#Binding). Hacia el final de esta sección, se recomienda realizar el enlace/desvinculación del servicio en onStart/onStop en lugar de onResume/onPause (para el rendimiento razones). I pregunto si esto también se aplica a BroadcastReceivers? Gracias por adelantado. –