【问题标题】:How to send event from Activity to service with greenrobot event bus?如何使用greenrobot事件总线将事件从Activity发送到服务?
【发布时间】:2016-02-26 04:26:45
【问题描述】:

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

【问题讨论】:

  • 向我们展示了代码。是意图服务吗?
  • 分享你在服务中编写的代码
  • 请检查我的代码
  • 您没有在服务中注册EventBus
  • public int onStartCommand(Intent intent, int flags, int startId) { bus.register(this);

标签: android android-activity service event-bus greenrobot-eventbus-3.0


【解决方案1】:

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

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

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

【讨论】:

  • Eventbus 应该取代这些交互,因为它们的口号是“Android 优化的事件总线,简化了活动、片段、线程、服务等之间的通信”。这意味着我们应该能够在活动 服务之间进行通信。所以我们可以跳过绑定到服务:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多