• 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:无论事件从哪个线程发布,都要创建一个新线程处理事件。

  • 相关阅读:
    Vue基础:万字笔记,精华总结
    上线即碾压Github榜首!十大互联网Docker实战案例手册(大厂版)
    视频下载plus+:一款强大的视频下载小程序
    编译LoongArch的llvm交叉工具链
    使用elementUI的form表单和Steps步骤条如何让rules分步骤校验
    2022世界机器人大会开幕,有屋智能主动终止IPO,《2022人工智能发展白皮书》发布,2022可穿戴设备出货量将达3.44亿台
    虚基类设计 c++
    zabbix监控安装-linux
    亚马逊云科技 云技能孵化营——我的云技能之旅
    (链表) 25. K 个一组翻转链表 ——【Leetcode每日一题】
  • 原文地址:https://blog.csdn.net/m0_37872216/article/details/126263104