2017-08-21 5 views
1

Ich bin verblüfft über die fehlende Dokumentation für dieses typische Szenario. Ich habe 4 Aktivitäten in meiner Android App - A, B, C und D. Ich registriere einen WiFi P2p Broadcast Empfänger in Aktivität A. Sobald die Verbindung hergestellt ist, kann der Benutzer zwischen den Aktivitäten B, C und D wechseln und das/kill lassen App durch Drücken der Home-Taste/Töten aus dem letzten App-Menü. Wo sollte ich den Broadcast-Empfänger abmelden? In einer einzigen Aktivität würden Sie sich in der onResume() -Methode registrieren und die Registrierung in onPause() aufheben. Was ist mit mehreren Aktivitäten? Es scheint mir nicht ganz richtig, dass ich mich für jede Aktivität registrieren oder abmelden muss.Dynamischer Rundfunkempfänger in mehreren Aktivitäten

Relevante Code:

// helper class method called by Activity A by passing its context. 
private void registerReceiver(Context context) { 
    context.registerReceiver(p2pBroadcastReceiver, p2pIntentFilter); 
} 

Sorry, wenn dies zu einfach klingt, bitte mir die richtige Dokumentation/link direkt!

Antwort

1

Wie Sie die Aktivitäten B beginnen, C und D Sie Rundfunkempfänger im Lebenszyklus Rückrufverfahren in den betreffenden Tätigkeiten B, C und D.

Zum Beispiel in Ihrer Tätigkeit B deregistrieren können Sie die Sendung deregistrieren können Empfänger im onPause Verfahren von Aktivität B

public class MyActivity extends Activity 
{ 
private final BroadcastReceiver mybroadcast = new SmsBR(); 
public void onPause() 
    { 
    super.onPause(); 
    unregisterReceiver(mybroadcast); 
    } 
} 

im Android Framework nennt noch alle Lebenszyklus Callback-Methoden, auch wenn die Anwendung von System oder vom Benutzer getötet wird. Wenn Sie also in onPause() die Registrierung aufheben, wird es aufgerufen, wenn die Aktivität in den Hintergrund wechselt oder getötet wird.

+0

Du sagst also, ich sollte mich im onresume registrieren und die Registrierung bei jeder Aktivität aufheben? –

+0

Ich kenne Ihren Anwendungsaktivitätsfluss nicht, aber ein Szenario wäre, wenn Sie Aktivitäten in dieser Reihenfolge A -> B-> C-> D gestartet haben, so dass der Aufgabenbackstack Aktivität D als Kopfaktivität hat, die zuerst aufgerufen wird und seine Lebenszyklus-Callback-Methoden werden aufgerufen. Wenn Sie die Registrierung in Aktivität D aufheben, ist dies ausreichend, da Sie sich nicht in Aktivität C, Aktivität B und dann in Aktivität A abmelden müssen. Für Ihren speziellen Anwendungsfall wissen Sie, welche Aktivität zuerst ausgelöst wird oder wo Sie die Registrierung basierend auf der Funktionalität aufheben müssen der Aktivität selbst. –

+0

Der Aktivitätsfluss ist, dass der Benutzer in A startet, um einen Peer zu finden, mit dem er sich verbinden kann. Sobald er über WiFi Direct verbunden ist, geht er zu Aktivität B über und verwendet ihn als Menüaktivität. Von dort aus kann der Benutzer sich zu C und D bewegen. Ich registriere mich in A, und im Idealfall möchte ich wirklich nur den Rundfunkempfänger abmelden, wenn er die Anwendung beendet. –

Verwandte Themen