Как отправить событие из Activity в службу с помощью шины событий greenrobot?

Простой EventBus.getDefault().post() вызывает исключение, а не основной поток. Как отправить событие из Activity в службу с помощью шины событий greenrobot?

chronometer  = (Chronometer)findViewById(R.id.chrono);
        chronometer.setBase(SystemClock.elapsedRealtime());
        chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer arg0) {
                long countUp = (SystemClock.elapsedRealtime() - arg0.getBase()) / 1000;
                String asText = (countUp / 60) + ":" + (countUp % 60);
                Log.e("asText", "asText" + asText);
                ChronometerEvents event=new ChronometerEvents();
                event.setTime(asText);
                bus.post(event);
            }
        });



public class ChronometerEvents {
    private String time;


    public ChronometerEvents() {

    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}



public void onEvent(ChronometerEvents freq) {
        Log.e("Chronometer", "Chronometer" + freq.getTime());


    }

класс обслуживания

public class NewLocationUpdateService extends Service {

    private EventBus bus = EventBus.getDefault();


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

      bus.unregister(this);




        return START_NOT_STICKY;
    }




    @Override
    public IBinder onBind(Intent intent) {




        return binder;
    }

    @Override
    public boolean onUnbind(Intent intent) {


        return super.onUnbind(intent);

    }

  public void onEvent(ChronometerEvents freq) {
        Log.e("Chronometer", "Chronometer" + freq.getTime());


    }







}

можно ли отправить с помощью шины событий greenrobot?


person praj    schedule 26.02.2016    source источник
comment
показывает нам код. это сервис намерений?   -  person Raghunandan    schedule 26.02.2016
comment
поделитесь кодом, который вы написали в сервисе   -  person Ravi    schedule 26.02.2016
comment
пожалуйста, проверьте мой код   -  person praj    schedule 26.02.2016
comment
вы не зарегистрировались на EventBus в сервисе   -  person Ravi    schedule 26.02.2016
comment
public int onStartCommand (намерение намерения, флаги int, int startId) { bus.register (this);   -  person praj    schedule 26.02.2016
comment
Если это служба намерения, вместо этого используйте Intent для отправки события. Это зависит от типа службы, которую вы используете. Это Sticky?   -  person Amol Desai    schedule 26.02.2016
comment
пожалуйста, проверьте добавлен мой класс обслуживания также   -  person praj    schedule 26.02.2016


Ответы (1)


Я настоятельно рекомендую пересмотреть вашу архитектуру здесь. EventBus не предназначен для пересечения границ процессов, и службы Android не поддаются такой идее.

EventBus — отличный инструмент, но им очень легко злоупотребить.

Если вы хотите отправить информацию из действия в службу, лучше всего использовать Intent, но если вам действительно нужно более тесное взаимодействие, вам следует изучить привязку. Eventbus не должен заменять эти взаимодействия.

person shredder    schedule 26.02.2016
comment
Eventbus должен заменить эти взаимодействия, поскольку их лозунг — оптимизированная для Android шина событий, которая упрощает связь между действиями, фрагментами, потоками, службами и т. д. Это означает, что мы должны иметь возможность обмениваться данными между действиями ‹-› службами. поэтому мы можем пропустить привязку к сервису :/ - person Ninja Coding; 23.08.2016