• EventBus3 笔记


    eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。

    配置eventbus

    在build.gradle中,在依赖中添加:

    implementation 'org.greenrobot:eventbus:3.1.1'

    普通消息实现 

    普通消息的特点是,消息发送时若无接收方进行接受,则此消息作废。

    消息类型

    消息类型通常由自定义的类实现:

    1. public class Message {
    2. private String name;
    3. private int age;
    4. public Message(String name,int age){
    5. this.name = name;
    6. this.age = age;
    7. }
    8. public String getName(){
    9. return this.name;
    10. }
    11. public int getAge(){
    12. return this.age;
    13. }
    14. public void setName(String name){
    15. this.name = name;
    16. }
    17. public void setAge(int age){
    18. this.age = age;
    19. }
    20. }

    该消息类型中包含两个数据,一个是名字,一个是年龄。

    消息发送

    EventBus.getDefault().post(new Message("kuaile",22));

    EventBus.getDefault()获得eventbus的一个实例,该类是一个单例模式。

    我们实现一个信息对象,并为其成员变量赋值,该对象就是我们要传递的信息。

    信息接受

    信息接收方需要进行注册信息接受,并且在退出后解除注册。

    1. //注册eventbus
    2. EventBus.getDefault().register(this);
    1. // 解除注册eventbus
    2. @Override
    3. protected void onDestroy(){
    4. super.onDestroy();
    5. if (EventBus.getDefault().isRegistered(this)){
    6. EventBus.getDefault().unregister(this);
    7. }
    8. }

    注册内容实现后需要实现信息的接收:

    1. @Subscribe(threadMode = ThreadMode.POSTING)
    2. public void onEvent(Message message){
    3. if(message != null){
    4. Toast.makeText(this,"name "+message.getName()+" age "+message.getAge(),Toast.LENGTH_SHORT).show();
    5. }
    6. }

    在接收函数中要实例化一个消息类型的对象,并同时读取消息。

    粘性消息实现

    粘性消息的特点是,即便消息已经发送出去,也就是经过了发信息的时间点,之后注册的接收方照样可以接受到此信息。

    信息发送

    EventBus.getDefault().postSticky(new Message("huankuai",21));

    信息注册

    信息注册的内容与普通信息完全一样。

    信息接收

    1. @Subscribe(threadMode = ThreadMode.POSTING,sticky = true)
    2. public void onEvent(Message message){
    3. if(message != null){
    4. Toast.makeText(this,"name "+message.getName()+" age "+message.getAge(),Toast.LENGTH_SHORT).show();
    5. }
    6. }

    粘性信息的接收函数仅比普通消息多一个参数。

    ThreadMode

    posting:发布事件与接收事件在一个线程中,应尽量避免耗时操作,否则容易阻塞事件传递。

    main:事件的处理在主线程中进行。

    background:如果事件从主线程中发布,则在子线程中处理事件;如果事件从子线程发布,则在该子线程中处理。

    async:无论事件从哪个线程发布,都要创建一个新线程处理事件。

  • 相关阅读:
    如何选择适合的美颜SDK?
    go channel实践与源码探索(初始化、发送消息、接收消息、关闭)
    6187. 完成所有交易的初始最少钱数(每日一难phase2--day19)
    加密货币出现反弹的迹象,牛市即将回归?
    Linux从0到1——Linux第一个小程序:进度条
    python数据分析-房价数据集聚类分析
    ABAP BOM按层级删除数据
    一次XGBoost性能优化-超线程影响运算速度
    向量数据库是如何检索的?基于 Feder 的 HNSW 可视化实现
    【附源码】Python计算机毕业设计图书销售网站
  • 原文地址:https://blog.csdn.net/m0_37872216/article/details/126263104