Can I use greenrobot EventBus for Communication between Activity and Service?
You have to register the Subscriber, not the emitter.
So, remove register/unregister from your app if you do expect to get the event. If so, just add the onEvent
(AnyEvent event) method to the Application class.
Then register EventBus in your service in onStart()
and unregister in onStop()
.
It should work better then.
In your Application
public class MyApp extend Application {
@Override
public void onCreate() {
super.onCreate();
...
EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
}
or in your Activity
public class MyActivity extend Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
}
and in your 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
}
...
}
In my case comment by zyamys helped. Also, answer by Anthony is correct because of mistake in code.
In case you use a different process, the answer is NO. If you use different process it means it runs on a different virtual machine (like Davlik). All static fields are different...! Example (AndroidManifest.xml):
<service android:name=".GPSTracker" android:process=":my_gps_tracker" />
If you run service in the same process answer is YES. Example (AndroidManifest.xml):
<service android:name=".GPSTracker"/>
In the first case, I suggest of using Intents in combination with send/receive broadcast functionality to send data between service and activity.