• EventBus


    Android-->EventBus 3.0新版使用说明(及其使用方法)

    标签: EventBusAndroidSticky
    分类:

    当你来到此处, 你应该已经知道了EventBus是干嘛的了吧? (不知道的自行百度….)
    我就不阐述了, 说说区别和使用方法吧!

    EventBus 在新版(3.0beta)中取消了原来(2.+)的使用方式:

    public void onEvent(MessageEvent event) {
        log(event.message);
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    public void onEventMainThread(MessageEvent event) {
        textField.setText(event.message);
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    public void onEventBackgroundThread(MessageEvent event){
       saveToDisk(event.message);
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    变成了:

    @Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行
    public void onUserEvent(UserEvent event) {
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    @Subscribe(threadMode = ThreadMode.BackgroundThread) //在后台线程执行
    public void onUserEvent(UserEvent event) {
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    @Subscribe(threadMode = ThreadMode.Async) //强制在后台执行
    public void onUserEvent(UserEvent event) {
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3
    @Subscribe(threadMode = ThreadMode.PostThread) //默认方式, 在发送线程执行
    public void onUserEvent(UserEvent event) {
    }
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    由于官方 文档 还没有更新, 特此记录,
    官方文档: https://github.com/greenrobot/EventBus/blob/master/HOWTO.md#delivery-threads-and-threadmodes


    1:EventBus 的简单使用:

    //在Activity中,注册和反注册(通用的写法)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       EventBus.getDefault().register(this); //第1步: 注册
    }
    @Override
    protected void onDestroy() {
       super.onDestroy();
       EventBus.getDefault().unregister(this);//反注册
    }
    
    //在注册了的Activity中,声明处理事件的方法
    @Subscribe(threadMode = ThreadMode.BackgroundThread) //第2步:注册一个在后台线程执行的方法,用于接收事件
    public void onUserEvent(ClassEvent event) {//参数必须是ClassEvent类型, 否则不会调用此方法
    }
    //----------华丽的分割线---------------
    
    //在任意地方,调用发送事件
    EventBus.getDefault().post(new ClassEvent());//第3步: 发送事件
    
    //----------华丽的分割线---------------
    
    //在任意地方,注册事件类
    public static class ClassEvent{
    } //定义一个事件, 可以不包含成员变量,和成员方法
    
    //当然你也可以定义包含成员变量的事件, 用来传递参数
    public class MsgEvent {
       public String jsonData;
       public MsgEvent(String jsonData) {
           this.jsonData = jsonData;
       }
    }
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 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
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    2:Sticky事件的使用
    之前说的使用方法, 都是需要先注册(register), 再post,才能接受到事件;
    如果你使用postSticky发送事件, 那么可以不需要先注册, 也能接受到事件.

    首先,你可能需要声明一个方法:

    //注意,和之前的方法一样,只是多了一个 sticky = true 的属性.
    @Subscribe(threadMode = ThreadMode.MainThread, sticky = true)
    public void onEvent(MsgEvent event){
    }
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    其次, 你可以在没有register的情况下:(发送事件)

    EventBus.getDefault().postSticky(new MsgEvent("With Sticky"));
    • 1
    • 1

    之后, 再注册,这样就可以收到刚刚发送的事件了:

    EventBus.getDefault().register(this);//注册之后,马上就能收到刚刚postSticky发送的事件
    • 1
    • 1

    3:参数说明:

    /**
     * threadMode 表示方法在什么线程执行   (Android更新UI只能在主线程, 所以如果需要操作UI, 需要设置ThreadMode.MainThread)
     * sticky     表示是否是一个粘性事件   (如果你使用postSticky发送一个事件,那么需要设置为true才能接受到事件)
     * priority   优先级                 (如果有多个对象同时订阅了相同的事件, 那么优先级越高,会优先被调用.)
     * */
    @Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 100)
    public void onEvent(MsgEvent event){
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    源码地址: https://github.com/angcyo/EventBus3.0Demo

    1.使用步骤:

    compile 'org.greenrobot:eventbus:3.0.0'
    EventBus.getDefault().register(this); //1: 注册
    EventBus.getDefault().unregister(this);//反注册
    //发送消息方
    EventBus.getDefault().post("reflash");
    //接受方:
    @Subscribe //2:注册一个在后台线程执行的方法,用于接收事件
    public void onEventMainThread(String event) {



    遇到问题:暂无

     
     
     
  • 相关阅读:
    单调栈的四种用法
    AtCoder Beginner Contest 223 F Parenthesis Checking(线段树)
    牛客寒假算法基础集训营4 B 进制(线段树)
    AtCoder Beginner Contest 243 E Edge Deletion(最短路)
    AtCoder Beginner Contest 238 E E Range Sums(建图)
    CodeForces 1632D New Year Concert(ST 表、二分)
    【windows terminal】cmd
    【vue3】监控响应: reactive/watch/watchEffect/provide.inject/computed
    Spring DM Application Context
    Android学习历程(一)结构理解
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/6046310.html
Copyright © 2020-2023  润新知