个人记录 EventBus

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NianandShao/article/details/82261428

EventBus可以代替Intent Broadcast Handler在Activity Fragment Service线程之间传递数据

相关知识

四种ThreadMode

POSTING:post在什么线程发布,事件处理函数就在什么线程

MAIN:事件处理函数在UI线程运行

BACKGROUND:如果事件在UI线程发布,那么该事件处理函数就在新的线程运行,如果该事件在子线程发布,那么就在发布的子线程运行,该事件处理函数禁止更新UI

ASYNC:无论在什么线程发布,都会在新的线程运行

注册与注销

EventBus.getDefault().register(this) 注册

EventBus.getDefault().unregister(this) 注销

EventBus.getDefault().isRegister(this) 判断是否已注册 true 注册 false 没注册

建议注册在OnCreate 注销在OnDestroy 注册前先判断是否已注册

粘性事件

sticky 可以先发事件后注册

@Subscribe:事件订阅者,接收事件发布者的消息

@Publisher:事件发布者,直接调用EventBus.getDafault().post(obj)

注意:那里需要订阅就必须注册

普通事件

public class MainActivity extends AppCompatActivity {

    private AppCompatButton btn_Event;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_Event = findViewById(R.id.btn_event);

        btn_Event.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });
        
        //注册
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
    }

    //事件处理函数
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventFuc(Message message){
        btn_Event.setText(message.getMessage());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销
        EventBus.getDefault().unregister(this);
    }
}
public class SecondActivity extends AppCompatActivity {

    private AppCompatButton btn_message;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btn_message = findViewById(R.id.btn_message);

        btn_message.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发布事件
                EventBus.getDefault().post(new Message("我发布事件啦"));
                finish();
            }
        });
    }
}

粘性事件

public class MainActivity extends AppCompatActivity {

    private AppCompatButton btn_Event, btn_register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_Event = findViewById(R.id.btn_event);
        btn_register = findViewById(R.id.btn_register);

        btn_Event.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, SecondActivity.class));
            }
        });

        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //注册
                if (!EventBus.getDefault().isRegistered(this)) {
                    EventBus.getDefault().register(MainActivity.this);
                }
            }
        });


    }

    //事件处理函数
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onEventFuc(Message message) {
        btn_Event.setText(message.getMessage());
    }

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

在处理函数多添加个sticky = true

public class SecondActivity extends AppCompatActivity {

    private AppCompatButton btn_message;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btn_message = findViewById(R.id.btn_message);

        btn_message.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发布事件
                EventBus.getDefault().postSticky(new Message("我发布粘性事件啦"));
                finish();
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/NianandShao/article/details/82261428