• 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) {



    遇到问题:暂无

     
     
     
  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/huihuizhang/p/6046310.html
Copyright © 2020-2023  润新知