Android Local Broadcast

Android Local Broadcast (LocalBroadcastManager)

Wichtiger Hinweis: LocalBroadcastManager ist in AndroidX veraltet (deprecated). Offiziell wird für die App-interne Kommunikation LiveData oder Flow empfohlen, aber in Vorstellungsgesprächen wird es immer noch abgefragt.

1. Was ist ein Local Broadcast (im Vergleich zum Global Broadcast)?

Global Broadcast (sendBroadcast / sendOrderedBroadcast, siehe vorherige Lektionen)

  • Läuft über das System-AMS, übergreifend für Apps, alle Apps können diesen Broadcast empfangen
  • Sicherheitsrisiko: Daten können leicht von anderen Apps abgefangen werden; andere Apps können gefälschte Broadcasts senden, um unsere App anzugreifen

Local Broadcast – LocalBroadcastManager

  • Der Broadcast verbleibt innerhalb der aktuellen App und durchläuft nicht den globalen System-Broadcast-Mechanismus; andere Apps können ihn überhaupt nicht empfangen ✅ Vorteile:
  1. Sicher: Der Broadcast gelangt nicht nach außen, externe Apps können keine gefälschten Broadcasts senden
  2. Effizient: Keine Inter-Prozess- oder AMS-Kommunikation nötig, daher schneller
  3. Keine Berechtigungen erforderlich Einschränkungen:
  4. Nur dynamische Registrierung; statische Registrierung (im AndroidManifest) ist ungültig
  5. Funktioniert nur innerhalb derselben App; keine Übergänge zwischen Prozessen oder Apps möglich
  6. Kann nicht zusammen mit System-Broadcasts verwendet werden

2. Vollständige Code-Erklärung

2.1 Eigener Receiver MyReceiver

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Toast.makeText(context, "Lokalen Broadcast empfangen", Toast.LENGTH_LONG).show();
    }
}
Code-Sprache: PHP (php)

2.2 Verwendung von LocalBroadcastManager in der Activity

package cn.bamn.www.localcastdmeo;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private LocalBroadcastManager localBroadcastManager; // Referenz auf den Local Broadcast Manager
    private IntentFilter intentFilter;
    private MyReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Singleton-Instanz des LocalBroadcastManager abrufen
        localBroadcastManager = LocalBroadcastManager.getInstance(this);

        Button button = (Button) findViewById(R.id.btn_send);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                // Intent-Aktion erstellen und lokalen Broadcast senden
                Intent intent = new Intent("com.foxdevelop.www.LocalCastDemo.LOCAL_BROADCAST");
                localBroadcastManager.sendBroadcast(intent);
            }
        });

        // Lokalen Broadcast-Receiver dynamisch registrieren
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.foxdevelop.www.LocalCastDemo.LOCAL_BROADCAST");
        myReceiver = new MyReceiver();
        localBroadcastManager.registerReceiver(myReceiver,intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Zwingend abmelden! Speicherlecks vermeiden
        localBroadcastManager.unregisterReceiver(myReceiver);
    }
}
Code-Sprache: JavaScript (javascript)

Wichtige APIs:

  • LocalBroadcastManager.getInstance(context): Instanz abrufen (Singleton)
  • registerReceiver(receiver, intentFilter): Receiver dynamisch registrieren
  • sendBroadcast(intent): Ungeordneten lokalen Broadcast senden; sendOrderedBroadcast() für geordneten lokalen Broadcast
  • unregisterReceiver(): Registrierung beim Zerstören der Seite aufheben — muss zwingend gemacht werden, sonst Speicherleck-Gefahr

3. Vergleich: Local Broadcast vs. Global Unordered Broadcast vs. Global Ordered Broadcast

TypKommunikationsbereichÜbergreifendUnterbrechbarRegistrierungUnterliegender Mechanismus
Globaler ungeordneter Broadcast sendBroadcastGlobalJaNicht abbrechbarStatisch + DynamischSystem-AMS, Inter-Prozess
Globaler geordneter Broadcast sendOrderedBroadcastGlobalJaMit abortBroadcast abbrechbarStatisch + DynamischSystem-AMS, Inter-Prozess, seriell nach Priorität
Lokaler Broadcast LocalBroadcastManagerInnerhalb der AppNeinUnterstützt Abbruch bei geordneten BroadcastsNur dynamischIn-Memory-Verteilung, ohne AMS, hohe Effizienz

Android Local Broadcast

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert