0

简单的 EventBus.getDefault().post() 带来的异常不是主线程。如何使用greenrobot事件总线将事件从Activity发送到服务?

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 事件总线发送?

4

1 回答 1

3

我强烈建议在这里重新考虑您的架构。EventBus 不是为跨越进程边界而设计的,Android 服务也不适合这种想法。

EventBus 是一个很棒的工具,但很容易被误用。

如果您想将信息从 Activity 发送到 Service,最好使用 Intent,但如果您确实需要更紧密的交互,那么您应该考虑绑定。Eventbus 不应取代这些交互。

于 2016-02-26T11:38:31.390 回答