EventBus 详细使用教程[在Activity、Service、Receiver中Post](精简版)

原文地址


添加EventBus

compile 'de.greenrobot:eventbus:2.4.0'
  • 1
  • 1

直接下载jar包 |点击下载


注册和注销EventBus

@Override
    protected void onStart() {
        super.onStart();
        //注册EventBus
        EventBus.getDefault().register(this);
        Logger.e("EventBus注册");
    }

    @Override
    protected void onStop() {
        super.onStop();
        //注销EventBus
        EventBus.getDefault().unregister(this);

        Logger.e("EventBus注销");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

自定义消息类型

public class MessageEvent {
    public String message;

    public MessageEvent(String message){
        this.message=message;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创建消息接受

//接受消息的地方(在Android的UI线程中)
    public void onEventMainThread(MessageEvent event) {
        Logger.e("onEventMainThread"+event.message);
        tv_demo.setText(event.message);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

Post消息

1.在子线程中给Activity发消息更新UI

class MyThread extends Thread{
        @Override
        public void run() {
            //发送消息
            EventBus.getDefault().post(new MessageEvent("这是EventBus发送的消息更新UI"));
        }
    };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.在Service中发消息给Activity更新UI

public class MyService extends Service {

    public static final String ACTION_START="ACTION_START";

    @Override
    public IBinder onBind(Intent intent) {
        return new Binder();
    }

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

        if(ACTION_START.equals(intent.getAction())){
            new MyServerThread().start();
        }

        return super.onStartCommand(intent, flags, startId);
    }

    class MyServerThread extends Thread{
        @Override
        public void run() {
            EventBus.getDefault().post(new MessageEvent("这是在MyService的MyServerThread线程中Post的消息"));
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

3.在Receiver中发送消息给Activity更新UI

public class MyBroadcastReceiver extends BroadcastReceiver{
    public static final String ACTION_SEND="ACTION_SEND";

    @Override
    public void onReceive(Context context, Intent intent) {

        if (ACTION_SEND.equals(intent.getAction())){
            EventBus.getDefault().post(new MessageEvent("这是在[广播]中给Activity发送消息"));
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

github地址 | 欢迎Star

你可能感兴趣的:(Android)