2011-01-06 2 views

Antwort

0

Sie sollten die Registrierung aufheben, wenn Sie keine Broadcasts mehr empfangen wollen oder können.

21

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

„Sie können entweder dynamisch eine Instanz dieser Klasse mit Context.registerReceiver() registrieren oder statisch eine Implementierung durch den Tag in Ihrem AndroidManifest.xml veröffentlichen. Hinweis: Wenn ein Empfänger in Ihrer Aktivität Registrierung. onResume() - Implementierung, sollten Sie die Registrierung in Activity.onPause() aufheben. (Sie erhalten keine Intents, wenn Sie pausiert sind, und das reduziert den unnötigen Systemaufwand.) Heben Sie die Registrierung in Activity.onSaveInstanceState() nicht auf. "

:) Das SDK ist dein bester Freund. Ich würde sagen, tun Sie, was es in der SDK sagt, es sei denn, Sie benötigen den Empfänger unbedingt in der Pause, aber seien Sie vorsichtig. Müssen Sie den Empfänger dynamisch registrieren oder wäre es besser, ihn in die AndroidManifest.xml zu legen? Wenn Sie den Empfänger in das Manifest aufnehmen, müssen Sie sich keine Gedanken darüber machen, ob Sie den Empfänger registrieren oder die Registrierung aufheben.

+1

Beachten Sie, dass die Aktivität ab Honeycomb erst nach onStop killbar ist. Daher ist es möglich, die Registrierung in onStop (mit dem entsprechenden Register in onStart) anstelle von onPause aufzuheben. – Tom

4

Bisher habe ich zwei Fälle von dynamischen Rundfunkempfänger erfahren Registrierung:

  • Sie die Rundfunkempfänger wollen nur registriert werden, wenn die Aktivität auf foregroung ist, damit meine ich, dass der Benutzer tatsächlich das Sehen ist Layout der aktuellen Aktivität

-> Dann sollte der Rundfunkempfänger in onResume registriert und in onPause nicht registriert sein. Normaler Fall in der offiziellen Dokumentation (http://developer.android.com/reference/android/content/BroadcastReceiver.html).

  • Sie möchten, dass der Broadcast-Empfänger registriert wird, um eine dauerhafte Aktion auszulösen (höchstwahrscheinlich ein Dienst), und der Benutzer kann die Aktivität jederzeit unterbrechen (z. B. klickt der Benutzer auf den Netzschalter).
  • -> Dann sollte der Rundfunkempfänger in onCreate registriert und in onDestroy nicht registriert sein (bestätigt durch How to unregister BroadcastReceiver). Wenn nicht, wird die onReceive() -Methode nicht aufgerufen, wenn die Anwendung pausiert wird.
    Seien Sie vorsichtig, onDestroy wird nicht garantiert aufgerufen (Punkt ausgelöst in Android - When to Register/Unregister Broadcast Receivers created in an activity?), so dass Sie sicherstellen müssen, dass es irgendwann aufgerufen wird (Aktivität beendet), nicht sicher, es ist die beste Vorgehensweise.

    Jetzt warum sollte es dynamisch registriert werden?
    Wenn es keinen guten Grund für diesen Broadcast-Empfänger gibt, dann sollten Sie ihn wahrscheinlich in der Manifest-Datei mit dem richtigen Intent-Filter registrieren, um nicht mehr durch die Registrierung/Abmeldung gestört zu werden.

    1

    Wenn Sie Ihren Broadcast-Empfänger in einer Create-Methode regeisterten, wäre es besser, wenn Sie die Registrierung in onDestroy() method.it aufheben. Es wird nur eine Override-Methode aufgerufen, wenn Ihre App zerstört wird.

    Verwandte Themen