Broadcast (Broadcast) der vier Hauptkomponenten von Android

Einführung

Broadcast (Broadcast) ist eine der vier Hauptkomponenten von Android für die Kommunikation zwischen Prozessen/Threads.

Das größte Merkmal des Rundfunks ist, dass es dem Sender egal ist, ob der Empfänger die Daten empfängt oder wie der Empfänger die Daten verarbeitet, sondern nur für das „Sprechen“ zuständig ist, unabhängig davon, ob Sie „zuhören“ oder nicht.

Broadcasts können vom System kommen, beispielsweise sendet das Android-System Broadcasts, wenn verschiedene Systemereignisse auftreten (wenn das System hochfährt oder wenn das Gerät mit dem Aufladen beginnt).

Es kann auch von anderen Anwendungen kommen.Anwendungen können beispielsweise auch benutzerdefinierte Broadcasts senden, um andere Anwendungen zu benachrichtigen, dass sie Inhalte akzeptieren (Daten aktualisieren), an denen sie interessiert sein könnten.

Inhaltsverzeichnis

Einführung

Klassifizierung des Rundfunks

Nutzung des Rundfunks

Verweise

Klassifizierung des Rundfunks

Klassifiziert nach Sendemethode

  • Standardsendung

Es handelt sich um eine "völlig asynchrone Ausführung"-Sendung ohne jede Sequenz.Alle Broadcast-Empfänger empfangen diese Broadcast-Nachricht fast zur gleichen Zeit, was hocheffizient ist und nicht abgeschnitten werden kann.

  • geordnete Sendung

Es handelt sich um eine "Synchronausführung"-Sendung, die eine Sequenz hat. Nur ein Empfänger kann diese Broadcast-Nachricht gleichzeitig empfangen. Der Broadcast-Empfänger mit höherer Priorität kann die Broadcast-Nachricht zuerst empfangen, und der vorherige Broadcast-Empfänger kann auch die aktuelle abfangen Broadcast-Nachricht Die gesendete Broadcast-Nachricht, sodass der nachfolgende Broadcast-Empfänger die Broadcast-Nachricht nicht empfangen kann.

Klassifiziert nach Registrierungsmethode

  • statische Übertragung

Das Abhören erfolgt unabhängig davon, ob die Anwendung aktiv ist oder nicht. Jeder Trigger erstellt ein neues Empfängerobjekt.

  • dynamische Übertragung

Registrierung im Code Beachten Sie, dass die Registrierung des dynamisch registrierten Broadcasts aufgehoben werden muss, normalerweise onDestroy()durch Aufrufen unregisterReceiver()der Methode in der Methode.

Derselbe Empfänger wird von der Erstellung bis zur Aufhebung der Registrierung verwendet, unabhängig davon, wie oft die Übertragung ausgelöst wird.

Per Definition klassifizieren

  • Systemübertragung

Im Android-System sind mehrere System-Broadcasts integriert, und jeder System-Broadcast hat einen bestimmten IntentFilter, der hauptsächlich eine bestimmte Aktion enthält. Nachdem der System-Broadcast gesendet wurde, wird er vom entsprechenden BroadcastReceiver empfangen. Systembroadcast wird automatisch vom System gesendet, wenn ein bestimmtes Ereignis im System auftritt.

  • benutzerdefiniertes Radio

Broadcasts, die von Anwendungsentwicklern selbst definiert werden.

Klassifiziert nach Geltungsbereich

  • weltweit ausgestrahlt

Ausgesendete Rundsendungen können von jeder anderen Anwendung empfangen werden oder können Rundsendungen von jeder anderen Anwendung empfangen.

  • lokale Sendung

Broadcasts können nur innerhalb der Anwendung bereitgestellt werden, und Broadcast-Empfänger können nur interne Broadcasts empfangen und keine Broadcasts von anderen Anwendungen annehmen.

Nutzung des Rundfunks

Rundfunkempfänger erstellen

Um Broadcasting zu verwenden, müssen wir zuerst einen BroadcastReceiver (Broadcast-Empfänger) erstellen und BroadcastReceiver direkt erben, um eine Unterklasse zu erstellen und onReceive()die Methode , wie im folgenden Beispielcode gezeigt.

öffentliche Klasse MyReceiver erweitert BroadcastReceiver {
  // benutzerdefinierte Aktion
  Private Static Final String ACTION = "com.jeanboy.broadcast.MyReceiverFilter";
  
  @Überschreiben
  public void onReceive (Kontextkontext, Absichtsabsicht) {
    //TODO: Broadcast zur Verarbeitung empfangen
  }
}

statische Übertragung

Bei der Verwendung von Broadcasting muss es auch in der AndroidMainfest-Datei definiert werden, dh statisches Broadcasting registrieren.

<receiver android:name=".ui.broadcast.MyReceiver"
          android:enabled="true"
          android:exported="true">
    <Absichtsfilter>
        <!-- Zum Beispiel: Broadcast zum Systemstart empfangen -->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <!-- Zum Beispiel: einen benutzerdefinierten Broadcast empfangen -->
        <action android:name="com.jeanboy.broadcast.MyReceiverFilter" />
    </intent-filter>
</Empfänger>

Die Einstellung „enabled“ oben auf „true“ bedeutet, dass Broadcast-Informationen empfangen werden können. Exportiert ist wahr bedeutet, dass es die von einem externen APK gesendeten Broadcast-Informationen empfangen kann.

dynamische Übertragung

Die Nutzung von Dynamic Broadcasting muss nicht in der AndroidMainfest-Datei definiert, sondern nur im Code eingetragen werden.

// Sendung erstellen
MyReceiver myReceiver = new MyReceiver();
// IntentFilter erstellen
Absichtsfilter absichtsfilter = neuer absichtsfilter();
// Zum Beispiel: System-Broadcast-Aktion hinzufügen, um Netzwerkänderungen zu akzeptieren
intentionFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
// Zum Beispiel: benutzerdefinierte Aktion hinzufügen
intentionFilter.addAction(MyReceiver.ACTION);
// Übertragung registrieren
registerReceiver(meinEmpfänger, IntentFilter);
// Broadcast abmelden
unregisterReceiver(myReceiver);

Sendung senden

Das Senden von Broadcasts ist relativ einfach, unabhängig von statischen Broadcasts oder dynamischen Broadcasts, die Methode ist wie folgt (System-Broadcasts werden automatisch vom Android-System gesendet, was nicht Gegenstand dieses Artikels ist).

// Absicht erstellen
Absicht Absicht = neue Absicht ();
// Zum Beispiel: benutzerdefinierte Aktion hinzufügen
intention.setAction(MyReceiver.ACTION);
// Sendung senden
sendBroadcast(Absicht);

Statische Sendungen in Android 8.0

Da Android 8.0 die meisten statischen Broadcasts abschafft, müssen einige Teile des Codes modifiziert werden.

Der sendende Broadcast-Teil erfordert eine Einrichtung ComponetName.

Absicht Absicht = neue Absicht (MyReceiver.ACTION);
// ComponetName("Name des benutzerdefinierten Broadcast-Pakets", "Benutzerdefinierter Broadcast-Pfad")
Komponentenname Komponente = neuer Komponentenname("com.jeanboy.app.broadcast", "com.jeanboy.app.broadcast.MyReceiver");
intention.setComponent (Komponente);
sendBroadcast(Absicht);

Sendung mit Genehmigung

Sicherheitsprobleme, die bei der Verwendung von Broadcasts auftreten können:

  • Wenn andere Anwendungen unsere Sendung abhören, führt dies zu einem Datenverlust unserer Anwendung.

  • Wenn eine andere Anwendung vorgibt, unsere Anwendung zum Senden von Sendungen zu sein, startet sie häufig unser Sendungsempfangsprogramm, was zu Verwirrung oder sogar zum Absturz unserer Anwendung führt.

Um die oben genannten Sicherheitsprobleme zu vermeiden, stellt uns Android einen Berechtigungsmechanismus zur Verfügung.

Erstens können Sie Berechtigungen in der AndroidMainfest-Datei hinzufügen, wenn Sie statisches Broadcasting registrieren.

<manifestieren ...>
  <!-- Passen Sie Ihre eigenen Berechtigungen an -->
  <permission android:name="com.jeanboy.permissions.MY_BROADCAST"/>
  <!-- Benutzerdefinierte Berechtigungen verwenden -->
  <uses-permission android:name="com.jeanboy.permissions.MY_BROADCAST"/>
  <Anwendung ...>
    <!-- Berechtigungen hinzufügen -->
    <receiver android:name=".ui.broadcast.MyReceiver"
              android:permission="com.jeanboy.broadcast.MY_BROADCAST"
              android:enabled="true"
              android:exported="true">
      <Absichtsfilter>
        <!-- Zum Beispiel: einen benutzerdefinierten Broadcast empfangen -->
        <action android:name="com.jeanboy.broadcast.MyReceiverFilter" />
      </intent-filter>
    </Empfänger>
  </Anwendung>
</manifest>

Wenn wir dann eine Sendung senden, können wir eine Berechtigung dafür festlegen, und nur die App mit dieser Berechtigung kann die Sendung empfangen, wie unten gezeigt:

// Absicht erstellen
Absicht Absicht = neue Absicht ();
// Zum Beispiel: benutzerdefinierte Aktion hinzufügen
intention.setAction(MyReceiver.ACTION);
// Sendung senden, Berechtigungen hinzufügen
sendBroadcast(intent, "com.jeanboy.permissions.MY_BROADCAST");

lokale Sendung

Der oben beschriebene BroadcastReceiver dient zum Übertragen von Nachrichten zwischen Anwendungen, ist im Wesentlichen prozessübergreifend und kann von anderen Anwendungen abgefangen werden.

Der LocalBroadcast (lokaler Broadcast) dient der Übertragung von Nachrichten innerhalb der Anwendung, was effizienter als BroadcastReceiver ist, nur innerhalb der Anwendung gültig ist und keine Sicherheitsaspekte berücksichtigen muss.

Die Erstellung des lokalen Broadcasts ist immer noch an BroadcastReceiver zu erben, um eine Unterklasse zu erstellen und onReceive()die Methode . Verwenden Sie LocalBroadcastManager, um verwandte Vorgänge beim Registrieren, Senden und Aufheben der Registrierung von Broadcasts auszuführen.

// Sendung erstellen
MyReceiver myReceiver = new MyReceiver();
// IntentFilter erstellen
Absichtsfilter absichtsfilter = neuer absichtsfilter();
// Zum Beispiel: benutzerdefinierte Aktion hinzufügen
intentionFilter.addAction(MyReceiver.ACTION);
// lokalen Broadcast registrieren
LocalBroadcastManager.getInstance(dies)
                .registerReceiver(meinEmpfänger, IntentFilter);
// Sendung senden
Intent Intent = new Intent(MyReceiver.ACTION));
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
// Lokale Sendung abmelden
LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);

Verweise

Acho que você gosta

Origin blog.csdn.net/fry3309/article/details/125281090
Recomendado
Clasificación