2017-05-27 1 views
-1

Ich habe Probleme beim Aufruf einer Aktivitätsfunktion in einem Broadcast-Empfängerobjekt. Es gibt einen Toast, der ausgeführt wird, so die Ausführung dort fließt aber die Activity-Funktion an sich nichtAktivität Funktion nicht im Broadcast-Empfängerobjekt aufgerufen

gerufen wird
protected void onCreate() 
    { 
     ... 
     ... 
     this.registerReceiver(receiver, new IntentFilter("ACTION")); 

    } 

    BroadcastReceiver receiver = new BroadcastReceiver() { 

    Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); // This runs 

    FunctionA(); // <-- This function is not called 
    }; 

    public void FunctionA() 
    { 
    ... // Function holds view objects 
    } 

Ich sah mich um und versuchte, so etwas wie dies innerhalb des Empfängerobjekt ohne Erfolg

 BroadcastReceiver receiver = new BroadcastReceiver() { 

      Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); //<--- This runs fine   

      MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       FunctionA(); // <-- Function still is not called 

      } 
     }); 

    } 

Frage ist warum wird nicht die Funktion aufgerufen? Gibt es eine Möglichkeit, die Funktion in diesem Broadcast-Empfängerobjekt aufzurufen?

+0

Wie, genau, bestimmen Sie, dass die "Funktion" nicht aufgerufen wird? Was * genau * macht 'FunctionA()'? – CommonsWare

+0

Die Funktion ist verantwortlich für das Ändern von Ansichten auf der Benutzeroberfläche. Ich habe sogar die Funktion angemeldet, die nicht im Logcat ausgedruckt wird. – Czar

Antwort

1

Ihr Code ist nicht in einer onReceive() Methode der BroadcastReceiver. onReceive() wird aufgerufen, wenn eine Sendung ankommt.

So wie es steht, wird Ihr Code ausgeführt, wenn der BroadcastReceiverinstanziiert ist. Das ist wahrscheinlich nicht das, was du willst.

Allgemeiner ist es unwahrscheinlich, dass die Verwendung einer BroadcastReceiver, die auf eine Systemübertragung wartet, die geeignete Lösung für jedes Problem ist, das Sie zu lösen versuchen. LocalBroadcastManager oder eine andere Form von Event-Bus ist beispielsweise die bessere Lösung für In-Process-Messaging.

+0

Danke für den Rat, deine Idee hat wirklich funktioniert. Anstelle von LocalBroadcastManager habe ich stattdessen einen Eventbus verwendet. – Czar

Verwandte Themen