zoukankan      html  css  js  c++  java
  • EventBus 3.0使用相关

    一 引入方法

      可以去github的官网中下载EventBus的相关资源  地址:https://github.com/greenrobot/EventBus

      当然还有他的官方网站 http://greenrobot.org/eventbus/

     Eclipse用户需要下载其jar包;AndroidStudio用户 可以在 build.gradle直接添加引用

    compile 'org.greenrobot:eventbus:3.0.0'

     

    二  使用

     1:在监听者的Activity或者Fragment或者其他地方注册及解除事件的绑定

        主要是通过使用EventBus,使Fragment之间的通信可以写的非常简洁易懂

      @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            /**创建界面时订阅事件,接收消息*/
            EventBus.getDefault().register(this);
        }
    
     @Override
        public void onDestroy() {
            super.onDestroy();
            /**界面销毁时,取消订阅*/
            EventBus.getDefault().unregister(this);
        }
    

      因为EventBus使用的是单例模式,所以可以实现一句话实现注册和取消注册;也可以通过Builder来自己创建;

         以上完成后就相当于注册了本界面接受消息,这样你在其他地方发消息时就可以通知本界面(是比Handler好用)

    2:写传送Message POJO(Plain Ordinary Java Object)简单的Java对象

    public class MsgEvent1 {
        private String msg;
    
        public MsgEvent1(String msg) {
            super();
            this.msg = msg;
        }
        public String getMsg() {
            return msg;
        }
    }

    2:写监听方法

    这个监听方法名字你可以自己取,但是得写上@Subscribe 注解,且形参必须要和传送过来的参数类型一致;

    那么既然名字能随意去取,怎么能控制运行的线程呢,答案就是在注解中控制 @Subscribe(threadMode = ThreadMode.MAIN)

    需要设置ThreadMode即可

      @Subscribe
            public void onEvent(MsgEvent1 msg){
                String content = msg.getMsg()
                        + "
     ThreadName: " + Thread.currentThread().getName()
                        + "
     ThreadId: " + Thread.currentThread().getId();
                System.out.println("onEvent(MsgEvent1 msg)收到" + content);
                tv.setText(content);
            }

    3:在任何地方发送消息

    且只需要一句话就行

    EventBus.getDefault().post(new MsgEvent1("Fuck World!!));
    这样EventBus使用就完成了

    有几个注意的地方
    1:哪个监听者会作出相应这要看你post的类型!!
    2:监听方法注意加@Subscribe注释,否则会报错:
    Caused by: org.greenrobot.eventbus.EventBusException: Subscriber class com.example.XXXXXX and its super classes have no public methods with the @Subscribe annotation
    3:监听方法为Public方法
  • 相关阅读:
    windows下安装nginx
    java 32位MD5加密的大写字符串
    eclipse运行maven的jetty插件内存溢出
    Phpstorm Alt+Enter 自动导入类
    CSS 再学习,文本处理
    1406 data too long for column 'content' at row 1
    tp5.1报错 页面错误!请稍后再试
    lnmp升级php
    Tp5,Service使用
    CSS再学习 之背景色 背景图片
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/6277835.html
Copyright © 2011-2022 走看看