2014-01-05 6 views
10

1) Ich habe eine Aktivität. Diese Aktivität startet einen Dienst, der wiederum einen BroadcastReceiver erstellt und registriert.BroadcastReceiver Lebenszyklus

2) Ich habe eine Aktivität. Diese Aktivität erstellt und registriert einen BroadcastReceiver.

Wann endet das Leben des BroadcastReceivers in jedem der oben genannten Fälle? Mit anderen Worten - wenn es zerstört wird und keine Sendungen mehr hört?

Antwort

4

Deklarieren Sie den Empfänger im Manifest, um einen unabhängigen Lebenszyklus zu erreichen.

http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

Danke für den Link, es klärte etwas, aber ich bin immer noch nicht sicher, wie es mein Ziel zu erreichen: meine Aktivität nur ein BroadcastReceiver registrierte verwendet wird. Ich möchte, dass dieser Empfänger aktiv ist, nachdem der Benutzer die Aktivität beendet hat - bis ich die Registrierung explizit aufgehoben habe. – rincEwind

+1

@rincEwind: ** "Ich möchte, dass dieser Empfänger aktiv ist, nachdem der Benutzer die Aktivität beendet hat - bis ich die Registrierung explizit aufheben muss." ** - In diesem Fall verwende Methode 1. in deiner Frage. Sie sollten niemals einen Empfänger in einer 'Aktivität' registrieren und die' Aktivität' beenden, ohne sie vorher abzumelden. Registrieren Sie es in einem 'Service', stellen Sie jedoch sicher, dass der' Service' es auch aufhebt, bevor es beendet wird (wenn/wann es fertig ist). Lassen Sie keine verwaisten Objekte herumhängen. – Squonk

+0

Danke, das habe ich getan und es scheint zu funktionieren. – rincEwind

0

A BroadcastReciever Lebenszyklus endet (dh stoppen Sendung empfangen wird), wenn Sie es deregistrieren. Normalerweise würden Sie dies in der onPause/onStop-Methode tun. aber es liegt technisch bei dir.

Beispiel:

@Override 
public void onResume() { 
    super.onResume(); 

    // Register mMessageReceiver to receive messages. 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
     new IntentFilter("my-event")); 
} 

// handler for received Intents for the "my-event" event 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 
    Log.d("receiver", "Got message: " + message); 
    } 
}; 

@Override 
protected void onPause() { 
    // Unregister since the activity is not visible 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onPause(); 
}