12

Kann ich die Bibliothek EventBus als Aktivität in Bezug auf die Dienstkommunikation verwenden?Kann ich den greenrobot EventBus für die Kommunikation zwischen Aktivität und Service verwenden?

Ich habe versucht, dies in meiner app wie folgt:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    EventBus.getDefault().register(this); 
    setContentView(R.layout.activity_music_player); 
    Intent serviceIntent=new Intent(MusicPlayerActivityTest.this,MusicPlayerServiceTest.class); 
    startService(serviceIntent); 
    EventBus.getDefault().post(new SetSongList(songArraList, 0)); 
} 

@Override 
protected void onDestroy() { 
    EventBus.getDefault().unregister(this); 
    super.onDestroy(); 
} 

und in meinem Dienst onEvent genannt.

+0

haben Sie versucht, es vor dem Posten hier? –

+0

ja ich habe es versucht. aber bekomme einen Fehler sagt "Teilnehmerklasse hat keine öffentlichen Methoden onEvent" –

+0

gut ... das ist eine andere Sache. Sie sollten etwas Code und Logcat veröffentlichen, damit wir Ihnen helfen können, es zu beheben (wenn möglich) –

Antwort

20

Sie müssen den Abonnenten registrieren, nicht den Sender.

Also, entfernen Sie die Registrierung/Registrierung von Ihrer App, wenn Sie erwarten, das Ereignis zu erhalten. Wenn dies der Fall ist, fügen Sie einfach die onEvent (AnyEvent-Ereignis) -Methode zur Application-Klasse hinzu.

Dann registrieren Sie EventBus in Ihrem Service in onStart() und Registrierung in onStop().

Es sollte dann besser funktionieren.

in Ihrer Anwendung

public class MyApp extend Application { 
    @Override 
    public void onCreate() { 
    super.onCreate(); 
    ... 
    EventBus.getDefault().post(new SetSongList(songArraList, 0)); 
    } 
} 

oder in Ihrer Aktivität

public class MyActivity extend Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    EventBus.getDefault().post(new SetSongList(songArraList, 0)); 
    } 
} 

und in der Service-

public class MyService extends Service { 
    ... 
    @Override 
    public void onCreate() { 
    super.onCreate(); 
    EventBus.getDefault().register(this); 
    } 

    @Override 
    public void onDestroy() { 
    EventBus.getDefault().unregister(this); 
    super.onDestroy(); 
    } 

    public void onEvent(SetSongList event){ 
    // do something with event 
    } 
    ... 
} 
+6

Sollte es nicht '@Abonnieren public void onEvent (SetSongList-Ereignis) {'? – behelit

+1

Dies scheint nicht zu funktionieren, es erzeugt den folgenden Fehler: Konnte Ereignis nicht absetzen: Klasse someEvent zu subskribierenden Klasse Klasse someService java.lang.RuntimeException: Kann nicht Handler innerhalb Thread erstellen, die Looper nicht aufgerufen hat .prepare() – behelit

+0

Dies ist für EventBus 2.4, die API mit der neuen Version 3.0 geändert. Poste deinen Code in einen neuen Thread, den ich mir ansehen kann. – Anthony

Verwandte Themen